summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES-1.3.txt10
-rw-r--r--CHANGES.txt12
-rw-r--r--INSTALL.txt5
-rw-r--r--Makefile42
-rw-r--r--backend/ipp.c93
-rw-r--r--backend/usb-darwin.c55
-rw-r--r--cgi-bin/Dependencies3
-rw-r--r--cgi-bin/Makefile16
-rw-r--r--cgi-bin/ipp-var.c26
-rw-r--r--cgi-bin/makedocset.c478
-rw-r--r--cgi-bin/var.c12
-rw-r--r--config-scripts/cups-ssl.m48
-rw-r--r--cups/Makefile54
-rw-r--r--cups/adminutil.c2
-rw-r--r--cups/auth.c94
-rw-r--r--cups/cups.h11
-rw-r--r--cups/debug.c19
-rw-r--r--cups/debug.h1
-rw-r--r--cups/emit.c75
-rw-r--r--cups/getdevices.c3
-rw-r--r--cups/getputfile.c6
-rw-r--r--cups/globals.c2
-rw-r--r--cups/globals.h3
-rw-r--r--cups/http-support.c7
-rw-r--r--cups/http.c84
-rw-r--r--cups/http.h5
-rw-r--r--cups/ipp.c2
-rw-r--r--cups/language.c18
-rw-r--r--cups/libcups.exp2
-rw-r--r--cups/localize.c80
-rw-r--r--cups/options.c24
-rw-r--r--cups/page.c14
-rw-r--r--cups/request.c11
-rw-r--r--cups/test.ppd2
-rw-r--r--cups/testppd.c41
-rw-r--r--cups/transcode.c4
-rw-r--r--cups/usersys.c63
-rw-r--r--doc/Makefile33
-rw-r--r--doc/cups-printable.css4
-rw-r--r--doc/favicon.pngbin2271 -> 0 bytes
-rw-r--r--doc/help/api-array.html4
-rw-r--r--doc/help/api-cgi.html1021
-rw-r--r--doc/help/api-cups.html63
-rw-r--r--doc/help/api-driver.html1096
-rw-r--r--doc/help/api-filedir.html4
-rw-r--r--doc/help/api-filter.html4
-rw-r--r--doc/help/api-httpipp.html148
-rw-r--r--doc/help/api-mime.html715
-rw-r--r--doc/help/api-overview.html4
-rw-r--r--doc/help/api-ppd.html22
-rw-r--r--doc/help/api-ppdc.html2121
-rw-r--r--doc/help/api-raster.html60
-rw-r--r--doc/help/postscript-driver.html4
-rw-r--r--doc/help/ppd-compiler.html4
-rw-r--r--doc/help/raster-driver.html4
-rw-r--r--doc/help/ref-classes-conf.html46
-rw-r--r--driver/Makefile3
-rw-r--r--filter/Makefile22
-rw-r--r--filter/bannertops.c6
-rw-r--r--locale/cups_ja.po3477
-rw-r--r--man/classes.conf.man10
-rw-r--r--man/printers.conf.man4
-rw-r--r--packaging/cups.spec.in2
-rw-r--r--ppdc/Makefile26
-rw-r--r--ppdc/ppdc-driver.cxx53
-rw-r--r--ppdc/ppdc-import.cxx103
-rw-r--r--ppdc/sample.drv11
-rw-r--r--scheduler/Makefile5
-rw-r--r--scheduler/auth.c4
-rw-r--r--scheduler/classes.c11
-rw-r--r--scheduler/client.c135
-rw-r--r--scheduler/client.h4
-rw-r--r--scheduler/conf.c27
-rw-r--r--scheduler/conf.h4
-rw-r--r--scheduler/dirsvc.c28
-rw-r--r--scheduler/ipp.c35
-rw-r--r--scheduler/job.c22
-rw-r--r--scheduler/job.h4
-rw-r--r--scheduler/main.c14
-rw-r--r--scheduler/network.c2
-rw-r--r--scheduler/printers.c17
-rw-r--r--scheduler/printers.h4
-rw-r--r--scheduler/type.c75
-rw-r--r--systemv/Makefile10
-rwxr-xr-xtest/run-stp-tests.sh3
-rw-r--r--tools/makedocset72
86 files changed, 7075 insertions, 3862 deletions
diff --git a/CHANGES-1.3.txt b/CHANGES-1.3.txt
index 644ff8b33..709f815de 100644
--- a/CHANGES-1.3.txt
+++ b/CHANGES-1.3.txt
@@ -3,6 +3,16 @@ CHANGES-1.3.txt
CHANGES IN CUPS V1.3.11
+ - The web interface could hang on OpenBSD (STR #3176)
+ - The scheduler and cupsfilter utility did not handle rules starting
+ with a negation operator properly (STR #3160)
+ - The scheduler and cupsfilter utility would crash with certain MIME
+ .types rules (STR #3159)
+ - httpSetField wasn't bracketing IPv6 numeric addresses for the Host:
+ field (STR #3164)
+ - The ServerName, if specified, was not treated as a valid alias for the
+ local system (STR #3167)
+ - "make epm" did not work (STR #3166)
- "lpstat -h server" showed non-shared printers (STR #3147)
- "make check" did not work on Linux (STR #3161)
diff --git a/CHANGES.txt b/CHANGES.txt
index 93a428e1f..dcf311820 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,4 @@
-CHANGES.txt - 2009-04-21
+CHANGES.txt - 2009-05-08
------------------------
CHANGES IN CUPS V1.4b3
@@ -8,6 +8,16 @@ CHANGES IN CUPS V1.4b3
Russian and partial localizations for Chinese, Danish, Finnish,
French, Italian, Korean, Norwegian, Portuguese, and Swedish
(STR #3096, STR #3098, STR #3109, STR #3111, STR #3141)
+ - Fixed a number of ppdi issues and added a unit test to validate that
+ ppdc + ppdi can generate and import the same data (STR #3152)
+ - Moving jobs in the web interface now shows an error if you only have
+ one printer or class added (STR #3094)
+ - Since classes have never truly supported the printer-error-policy
+ stuff added in CUPS 1.2, update the code to reflect the current
+ reality and support only the retry-current-job policy for now
+ (STR #3171)
+ - Revised the password callback support (STR #2953)
+ - ppdEmit*() did not choose between PageSize and PageRegion properly.
- Make some fairly substantial changes to the Kerberos support code so
that CUPS can work in multi-realm environments and does not require
delegatable credentials. Shared printing still requires delegation,
diff --git a/INSTALL.txt b/INSTALL.txt
index fbc2b3c39..ea7aba67e 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -186,8 +186,9 @@ GETTING DEBUG LOGGING FROM CUPS
which messages are logged.
CUPS_DEBUG_LEVEL Specifies a number from 0 to 9 to control the
verbosity of the logging. The default level is 1.
- CUPS_DEBUG_LOG Specifies a log file to append to; use the name "-"
- to send the messages to stderr.
+ CUPS_DEBUG_LOG Specifies a log file to use. Specify the name "-"
+ to send the messages to stderr. Prefix a filename
+ with "+" to append to an existing file.
REPORTING PROBLEMS
diff --git a/Makefile b/Makefile
index fb892d04c..5a1f8b4a0 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
#
# Top-level Makefile for the Common UNIX Printing System (CUPS).
#
-# Copyright 2007-2008 by Apple Inc.
+# Copyright 2007-2009 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -333,17 +333,53 @@ uninstall:
# Run the test suite...
#
-test: all
+test: all unittests
echo Running CUPS test suite...
cd test; ./run-stp-tests.sh
-check: all
+check: all unittests
echo Running CUPS test suite with defaults...
cd test; ./run-stp-tests.sh 1 0 n
#
+# Create an Xcode docset...
+#
+
+apihelp:
+ for dir in cgi-bin cups filter driver ppdc scheduler; do\
+ echo Generating API help in $$dir... ;\
+ (cd $$dir; $(MAKE) $(MFLAGS) apihelp) || exit 1;\
+ done
+
+framedhelp:
+ for dir in cgi-bin cups filter driver ppdc scheduler; do\
+ echo Generating framed API help in $$dir... ;\
+ (cd $$dir; $(MAKE) $(MFLAGS) framedhelp) || exit 1;\
+ done
+
+docset: apihelp
+ echo Generating docset directory tree...
+ $(RM) -r org.cups.docset
+ mkdir -p org.cups.docset/Contents/Resources/Documentation/help
+ mkdir -p org.cups.docset/Contents/Resources/Documentation/images
+ cd doc; $(MAKE) $(MFLAGS) docset
+ cd cgi-bin; $(MAKE) $(MFLAGS) makedocset
+ cgi-bin/makedocset org.cups.docset \
+ `svnversion . | sed -e '1,$$s/[a-zA-Z]//g'` \
+ doc/help/api-*.tokens
+ $(RM) doc/help/api-*.tokens
+ echo Indexing docset...
+ /Developer/usr/bin/docsetutil index org.cups.docset
+ echo Generating docset archive and feed...
+ /Developer/usr/bin/docsetutil package --output org.cups.docset.xar \
+ --atom org.cups.docset.atom \
+ --download-url http://www.cups.org/org.cups.docset.xar \
+ org.cups.docset
+
+
+#
# Make software distributions using EPM (http://www.easysw.com/epm/)...
#
diff --git a/backend/ipp.c b/backend/ipp.c
index f71d6186c..aa7878c64 100644
--- a/backend/ipp.c
+++ b/backend/ipp.c
@@ -143,7 +143,9 @@ main(int argc, /* I - Number of command-line args */
"copies-supported",
"document-format-supported",
"marker-colors",
+ "marker-high-levels",
"marker-levels",
+ "marker-low-levels",
"marker-message",
"marker-names",
"marker-types",
@@ -1629,11 +1631,8 @@ report_printer_state(ipp_t *ipp, /* I - IPP response */
*reasons, /* printer-state-reasons */
*marker; /* marker-* attributes */
const char *reason; /* Current reason */
- const char *message; /* Message to show */
- char unknown[1024]; /* Unknown message string */
const char *prefix; /* Prefix for STATE: line */
char state[1024]; /* State string */
- cups_lang_t *language; /* Current localization */
int saw_caprw; /* Saw com.apple.print.recoverable-warning state */
@@ -1648,96 +1647,24 @@ report_printer_state(ipp_t *ipp, /* I - IPP response */
saw_caprw = 0;
state[0] = '\0';
prefix = "STATE: ";
- language = cupsLangDefault();
for (i = 0, count = 0; i < reasons->num_values; i ++)
{
reason = reasons->values[i].string.text;
- if (strcmp(reason, "paused"))
+ if (!strcmp(reason, "com.apple.print.recoverable-warning"))
+ saw_caprw = 1;
+ else if (strcmp(reason, "paused"))
{
strlcat(state, prefix, sizeof(state));
strlcat(state, reason, sizeof(state));
prefix = ",";
}
-
- message = "";
-
- if (!strncmp(reason, "media-needed", 12))
- message = _("Media tray needs to be filled.");
- else if (!strncmp(reason, "media-jam", 9))
- message = _("Media jam!");
- else if (!strncmp(reason, "moving-to-paused", 16) ||
- !strncmp(reason, "offline", 7) ||
- !strncmp(reason, "paused", 6) ||
- !strncmp(reason, "shutdown", 8))
- message = _("Printer offline.");
- else if (!strncmp(reason, "toner-low", 9))
- message = _("Toner low.");
- else if (!strncmp(reason, "toner-empty", 11))
- message = _("Out of toner!");
- else if (!strncmp(reason, "cover-open", 10))
- message = _("Cover open.");
- else if (!strncmp(reason, "interlock-open", 14))
- message = _("Interlock open.");
- else if (!strncmp(reason, "door-open", 9))
- message = _("Door open.");
- else if (!strncmp(reason, "input-tray-missing", 18))
- message = _("Media tray missing!");
- else if (!strncmp(reason, "media-low", 9))
- message = _("Media tray almost empty.");
- else if (!strncmp(reason, "media-empty", 11))
- message = _("Media tray empty!");
- else if (!strncmp(reason, "output-tray-missing", 19))
- message = _("Output tray missing!");
- else if (!strncmp(reason, "output-area-almost-full", 23))
- message = _("Output bin almost full.");
- else if (!strncmp(reason, "output-area-full", 16))
- message = _("Output bin full!");
- else if (!strncmp(reason, "marker-supply-low", 17))
- message = _("Ink/toner almost empty.");
- else if (!strncmp(reason, "marker-supply-empty", 19))
- message = _("Ink/toner empty!");
- else if (!strncmp(reason, "marker-waste-almost-full", 24))
- message = _("Ink/toner waste bin almost full.");
- else if (!strncmp(reason, "marker-waste-full", 17))
- message = _("Ink/toner waste bin full!");
- else if (!strncmp(reason, "fuser-over-temp", 15))
- message = _("Fuser temperature high!");
- else if (!strncmp(reason, "fuser-under-temp", 16))
- message = _("Fuser temperature low!");
- else if (!strncmp(reason, "opc-near-eol", 12))
- message = _("OPC almost at end-of-life.");
- else if (!strncmp(reason, "opc-life-over", 13))
- message = _("OPC at end-of-life!");
- else if (!strncmp(reason, "developer-low", 13))
- message = _("Developer almost empty.");
- else if (!strncmp(reason, "developer-empty", 15))
- message = _("Developer empty!");
- else if (!strcmp(reason, "com.apple.print.recoverable-warning"))
- saw_caprw = 1;
- else if (strstr(reason, "error") != NULL)
- {
- message = unknown;
-
- snprintf(unknown, sizeof(unknown), _("Unknown printer error (%s)!"),
- reason);
- }
-
- if (message[0])
- {
- count ++;
- if (strstr(reasons->values[i].string.text, "error"))
- fprintf(stderr, "ERROR: %s\n", _cupsLangString(language, message));
- else if (strstr(reasons->values[i].string.text, "warning"))
- fprintf(stderr, "WARNING: %s\n", _cupsLangString(language, message));
- else
- fprintf(stderr, "INFO: %s\n", _cupsLangString(language, message));
- }
}
- fprintf(stderr, "%s\n", state);
+ if (state[0])
+ fprintf(stderr, "%s\n", state);
/*
* Relay com.apple.print.recoverable-message...
@@ -1755,9 +1682,15 @@ report_printer_state(ipp_t *ipp, /* I - IPP response */
if ((marker = ippFindAttribute(ipp, "marker-colors", IPP_TAG_NAME)) != NULL)
report_attr(marker);
+ if ((marker = ippFindAttribute(ipp, "marker-high-levels",
+ IPP_TAG_INTEGER)) != NULL)
+ report_attr(marker);
if ((marker = ippFindAttribute(ipp, "marker-levels",
IPP_TAG_INTEGER)) != NULL)
report_attr(marker);
+ if ((marker = ippFindAttribute(ipp, "marker-low-levels",
+ IPP_TAG_INTEGER)) != NULL)
+ report_attr(marker);
if ((marker = ippFindAttribute(ipp, "marker-message", IPP_TAG_TEXT)) != NULL)
report_attr(marker);
if ((marker = ippFindAttribute(ipp, "marker-names", IPP_TAG_NAME)) != NULL)
diff --git a/backend/usb-darwin.c b/backend/usb-darwin.c
index fe2dabdd3..8d3fe4f81 100644
--- a/backend/usb-darwin.c
+++ b/backend/usb-darwin.c
@@ -279,10 +279,11 @@ static void soft_reset();
static void status_timer_cb(CFRunLoopTimerRef timer, void *info);
#if defined(__i386__) || defined(__x86_64__)
-static pid_t child_pid; /* Child PID */
+static pid_t child_pid; /* Child PID */
static void run_legacy_backend(int argc, char *argv[], int fd); /* Starts child backend process running as a ppc executable */
-static void sigterm_handler(int sig); /* SIGTERM handler */
#endif /* __i386__ || __x86_64__ */
+static int job_canceled = 0; /* Was the job canceled? */
+static void sigterm_handler(int sig); /* SIGTERM handler */
#ifdef PARSE_PS_ERRORS
static const char *next_line (const char *buffer);
@@ -448,9 +449,9 @@ print_device(const char *uri, /* I - Device URI */
fputs("STATE: -connecting-to-device\n", stderr);
/*
- * Now that we are "connected" to the port, ignore SIGTERM so that we
+ * Now that we are "connected" to the port, catch SIGTERM so that we
* can finish out any page data the driver sends (e.g. to eject the
- * current page... Only ignore SIGTERM if we are printing data from
+ * current page... Only catch SIGTERM if we are printing data from
* stdin (otherwise you can't cancel raw jobs...)
*/
@@ -462,7 +463,7 @@ print_device(const char *uri, /* I - Device URI */
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
- action.sa_handler = SIG_IGN;
+ action.sa_handler = sigterm_handler;
sigaction(SIGTERM, &action, NULL);
}
@@ -582,13 +583,13 @@ print_device(const char *uri, /* I - Device URI */
{
fputs("DEBUG: Received an interrupt before any bytes were "
"written, aborting!\n", stderr);
- return (0);
+ return (CUPS_BACKEND_OK);
}
else if (errno != EAGAIN)
{
_cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
perror("DEBUG: select");
- return (CUPS_BACKEND_STOP);
+ return (CUPS_BACKEND_FAILED);
}
}
@@ -621,7 +622,7 @@ print_device(const char *uri, /* I - Device URI */
{
_cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
perror("DEBUG: read");
- return CUPS_BACKEND_STOP;
+ return (CUPS_BACKEND_FAILED);
}
g.print_bytes = 0;
@@ -667,7 +668,7 @@ print_device(const char *uri, /* I - Device URI */
(long)status);
fprintf(stderr, "DEBUG: USB class driver Abort returned %ld\n",
(long)err);
- status = CUPS_BACKEND_STOP;
+ status = job_canceled ? CUPS_BACKEND_FAILED : CUPS_BACKEND_STOP;
break;
}
@@ -1910,23 +1911,47 @@ static void run_legacy_backend(int argc,
exit(exitstatus);
}
+#endif /* __i386__ || __x86_64__ */
+
/*
* 'sigterm_handler()' - SIGTERM handler.
*/
-static void sigterm_handler(int sig)
+static void
+sigterm_handler(int sig) /* I - Signal */
{
- /* If we started a child process pass the signal on to it...
- */
+#if defined(__i386__) || defined(__x86_64__)
if (child_pid)
- kill(child_pid, sig);
+ {
+ /*
+ * If we started a child process pass the signal on to it...
+ */
- exit(1);
-}
+ int status;
+
+ kill(child_pid, sig);
+ while (waitpid(child_pid, &status, 0) < 0 && errno == EINTR);
+ if (WIFEXITED(status))
+ exit(WEXITSTATUS(status));
+ else if (status == SIGTERM || status == SIGKILL)
+ exit(0);
+ else
+ {
+ fprintf(stderr, "DEBUG: Child crashed on signal %d!\n", status);
+ exit(CUPS_BACKEND_STOP);
+ }
+ }
#endif /* __i386__ || __x86_64__ */
+ /*
+ * Otherwise just flag that the job has been canceled...
+ */
+
+ job_canceled = 1;
+}
+
#ifdef PARSE_PS_ERRORS
/*
diff --git a/cgi-bin/Dependencies b/cgi-bin/Dependencies
index c417e9693..f018cd0a0 100644
--- a/cgi-bin/Dependencies
+++ b/cgi-bin/Dependencies
@@ -42,6 +42,9 @@ jobs.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
jobs.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h ../cups/file.h
jobs.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
jobs.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
+makedocset.o: cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+makedocset.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h
+makedocset.o: ../cups/file.h ../cups/language.h ../cups/array.h help-index.h
printers.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
printers.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h ../cups/file.h
printers.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
diff --git a/cgi-bin/Makefile b/cgi-bin/Makefile
index 3e1a59aaa..b51b4c06c 100644
--- a/cgi-bin/Makefile
+++ b/cgi-bin/Makefile
@@ -28,6 +28,7 @@ OBJS = \
classes.o \
help.o \
jobs.o \
+ makedocset.o \
printers.o \
testcgi.o \
testhi.o \
@@ -80,7 +81,7 @@ unittests: $(UNITTARGETS)
#
clean:
- $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS)
+ $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS) makedocset
$(RM) libcupscgi.so libcupscgi.sl libcupscgi.dylib
@@ -194,6 +195,8 @@ apihelp:
--css ../doc/cups-printable.css \
--header api-cgi.header --intro api-cgi.shtml \
cgi.h help-index.h $(LIBOBJS:.o=.c) >../doc/help/api-cgi.html
+ mxmldoc --tokens help/api-cgi.html api-cgi.xml >../doc/help/api-cgi.tokens
+ $(RM) api-cgi.xml
framedhelp:
mxmldoc --framed api-cgi \
@@ -300,6 +303,17 @@ jobs.cgi: jobs.o ../Makedefs ../cups/$(LIBCUPS) $(LIBCUPSCGI)
#
+# makedocset
+#
+
+makedocset: makedocset.o ../Makedefs libcupscgi.a ../cups/libcups.a
+ echo Linking $@...
+ $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ makedocset.o libcupscgi.a \
+ ../cups/libcups.a $(COMMONLIBS) $(SSLLIBS) $(DNSSDLIBS) \
+ $(LIBZ) $(LIBGSSAPI)
+
+
+#
# printers.cgi
#
diff --git a/cgi-bin/ipp-var.c b/cgi-bin/ipp-var.c
index 4048dd605..1b63056fa 100644
--- a/cgi-bin/ipp-var.c
+++ b/cgi-bin/ipp-var.c
@@ -288,8 +288,7 @@ cgiMoveJobs(http_t *http, /* I - Connection to server */
* See who is logged in...
*/
- if ((user = getenv("REMOTE_USER")) == NULL)
- user = "guest";
+ user = getenv("REMOTE_USER");
/*
* See if the user has already selected a new destination...
@@ -374,8 +373,14 @@ cgiMoveJobs(http_t *http, /* I - Connection to server */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "printer-uri-supported");
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
- "requesting-user-name", NULL, user);
+ if (user)
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+ "requesting-user-name", NULL, user);
+
+ ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type",
+ CUPS_PRINTER_LOCAL);
+ ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask",
+ CUPS_PRINTER_SCANNER);
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
@@ -415,7 +420,18 @@ cgiMoveJobs(http_t *http, /* I - Connection to server */
else
cgiStartHTML(cgiText(_("Move All Jobs")));
- cgiCopyTemplateLang("job-move.tmpl");
+ if (cgiGetSize("JOB_PRINTER_NAME") > 0)
+ cgiCopyTemplateLang("job-move.tmpl");
+ else
+ {
+ if (job_id)
+ cgiSetVariable("MESSAGE", cgiText(_("Unable to move job")));
+ else
+ cgiSetVariable("MESSAGE", cgiText(_("Unable to move jobs")));
+
+ cgiSetVariable("ERROR", cgiText(_("No destinations added.")));
+ cgiCopyTemplateLang("error.tmpl");
+ }
}
else
{
diff --git a/cgi-bin/makedocset.c b/cgi-bin/makedocset.c
new file mode 100644
index 000000000..807c1f60f
--- /dev/null
+++ b/cgi-bin/makedocset.c
@@ -0,0 +1,478 @@
+/*
+ * "$Id$"
+ *
+ * Xcode documentation set generator.
+ *
+ * Copyright 2007-2009 by Apple Inc.
+ * Copyright 1997-2007 by Easy Software Products.
+ *
+ * These coded instructions, statements, and computer programs are the
+ * property of Apple Inc. and are protected by Federal copyright
+ * law. Distribution and use rights are outlined in the file "LICENSE.txt"
+ * which should have been included with this file. If this file is
+ * file is missing or damaged, see the license at "http://www.cups.org/".
+ *
+ * Usage:
+ *
+ * makedocset directory *.tokens
+ *
+ * Contents:
+ *
+ * main() - Test the help index code.
+ * compare_html() - Compare the titles of two HTML files.
+ * compare_sections() - Compare the names of two help sections.
+ * compare_sections_files() - Compare the number of files and section names.
+ * write_index() - Write an index file for the CUPS help.
+ * write_info() - Write the Info.plist file.
+ * write_nodes() - Write the Nodes.xml file.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include "cgi.h"
+#include <errno.h>
+
+
+/*
+ * Local structures...
+ */
+
+typedef struct _cups_html_s /**** Help file ****/
+{
+ char *path; /* Path to help file */
+ char *title; /* Title of help file */
+} _cups_html_t;
+
+typedef struct _cups_section_s /**** Help section ****/
+{
+ char *name; /* Section name */
+ cups_array_t *files; /* Files in this section */
+} _cups_section_t;
+
+
+/*
+ * Local functions...
+ */
+
+static int compare_html(_cups_html_t *a, _cups_html_t *b);
+static int compare_sections(_cups_section_t *a, _cups_section_t *b);
+static int compare_sections_files(_cups_section_t *a, _cups_section_t *b);
+static void write_index(const char *path, help_index_t *hi);
+static void write_info(const char *path, const char *revision);
+static void write_nodes(const char *path, help_index_t *hi);
+
+
+/*
+ * 'main()' - Test the help index code.
+ */
+
+int /* O - Exit status */
+main(int argc, /* I - Number of command-line args */
+ char *argv[]) /* I - Command-line arguments */
+{
+ int i; /* Looping var */
+ char path[1024], /* Path to documentation */
+ line[1024]; /* Line from file */
+ help_index_t *hi; /* Help index */
+ cups_file_t *tokens, /* Tokens.xml file */
+ *fp; /* Current file */
+
+
+ if (argc < 4)
+ {
+ puts("Usage: makedocset directory revision *.tokens");
+ return (1);
+ }
+
+ /*
+ * Index the help documents...
+ */
+
+ snprintf(path, sizeof(path), "%s/Contents/Resources/Documentation", argv[1]);
+ if ((hi = helpLoadIndex(NULL, path)) == NULL)
+ {
+ fputs("makedocset: Unable to index help files!\n", stderr);
+ return (1);
+ }
+
+ snprintf(path, sizeof(path), "%s/Contents/Resources/Documentation/index.html",
+ argv[1]);
+ write_index(path, hi);
+
+ snprintf(path, sizeof(path), "%s/Contents/Resources/Nodes.xml", argv[1]);
+ write_nodes(path, hi);
+
+ /*
+ * Write the Info.plist file...
+ */
+
+ snprintf(path, sizeof(path), "%s/Contents/Info.plist", argv[1]);
+ write_info(path, argv[2]);
+
+ /*
+ * Merge the Tokens.xml files...
+ */
+
+ snprintf(path, sizeof(path), "%s/Contents/Resources/Tokens.xml", argv[1]);
+ if ((tokens = cupsFileOpen(path, "w")) == NULL)
+ {
+ fprintf(stderr, "makedocset: Unable to create \"%s\": %s\n", path,
+ strerror(errno));
+ return (1);
+ }
+
+ cupsFilePuts(tokens, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ cupsFilePuts(tokens, "<Tokens version=\"1.0\">\n");
+
+ for (i = 3; i < argc; i ++)
+ {
+ if ((fp = cupsFileOpen(argv[i], "r")) == NULL)
+ {
+ fprintf(stderr, "makedocset: Unable to open \"%s\": %s\n", argv[i],
+ strerror(errno));
+ return (1);
+ }
+
+ if (!cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "<?xml ", 6) ||
+ !cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "<Tokens ", 8))
+ {
+ fprintf(stderr, "makedocset: Bad Tokens.xml file \"%s\"!\n", argv[i]);
+ return (1);
+ }
+
+ while (cupsFileGets(fp, line, sizeof(line)))
+ {
+ if (strcmp(line, "</Tokens>"))
+ cupsFilePrintf(tokens, "%s\n", line);
+ }
+
+ cupsFileClose(fp);
+ }
+
+ cupsFilePuts(tokens, "</Tokens>\n");
+
+ cupsFileClose(tokens);
+
+ /*
+ * Return with no errors...
+ */
+
+ return (0);
+}
+
+
+/*
+ * 'compare_html()' - Compare the titles of two HTML files.
+ */
+
+static int /* O - Result of comparison */
+compare_html(_cups_html_t *a, /* I - First file */
+ _cups_html_t *b) /* I - Second file */
+{
+ return (strcasecmp(a->title, b->title));
+}
+
+
+/*
+ * 'compare_sections()' - Compare the names of two help sections.
+ */
+
+static int /* O - Result of comparison */
+compare_sections(_cups_section_t *a, /* I - First section */
+ _cups_section_t *b) /* I - Second section */
+{
+ return (strcasecmp(a->name, b->name));
+}
+
+
+/*
+ * 'compare_sections_files()' - Compare the number of files and section names.
+ */
+
+static int /* O - Result of comparison */
+compare_sections_files(
+ _cups_section_t *a, /* I - First section */
+ _cups_section_t *b) /* I - Second section */
+{
+ int ret = cupsArrayCount(b->files) - cupsArrayCount(a->files);
+
+ if (ret)
+ return (ret);
+ else
+ return (strcasecmp(a->name, b->name));
+}
+
+
+/*
+ * 'write_index()' - Write an index file for the CUPS help.
+ */
+
+static void
+write_index(const char *path, /* I - File to write */
+ help_index_t *hi) /* I - Index of files */
+{
+ cups_file_t *fp; /* Output file */
+ help_node_t *node; /* Current help node */
+ _cups_section_t *section, /* Current section */
+ key; /* Section search key */
+ _cups_html_t *html; /* Current HTML file */
+ cups_array_t *sections, /* Sections in index */
+ *sections_files,/* Sections sorted by size */
+ *columns[3]; /* Columns in final HTML file */
+ int column, /* Current column */
+ lines[3], /* Number of lines in each column */
+ min_column, /* Smallest column */
+ min_lines; /* Smallest number of lines */
+
+
+ /*
+ * Build an array of sections and their files.
+ */
+
+ sections = cupsArrayNew((cups_array_func_t)compare_sections, NULL);
+
+ for (node = (help_node_t *)cupsArrayFirst(hi->nodes);
+ node;
+ node = (help_node_t *)cupsArrayNext(hi->nodes))
+ {
+ if (node->anchor)
+ continue;
+
+ key.name = node->section ? node->section : "Miscellaneous";
+ if ((section = (_cups_section_t *)cupsArrayFind(sections, &key)) == NULL)
+ {
+ section = (_cups_section_t *)calloc(1, sizeof(_cups_section_t));
+ section->name = key.name;
+ section->files = cupsArrayNew((cups_array_func_t)compare_html, NULL);
+
+ cupsArrayAdd(sections, section);
+ }
+
+ html = (_cups_html_t *)calloc(1, sizeof(_cups_html_t));
+ html->path = node->filename;
+ html->title = node->text;
+
+ cupsArrayAdd(section->files, html);
+ }
+
+ /*
+ * Build a sorted list of sections based on the number of files in each section
+ * and the section name...
+ */
+
+ sections_files = cupsArrayNew((cups_array_func_t)compare_sections_files,
+ NULL);
+ for (section = (_cups_section_t *)cupsArrayFirst(sections);
+ section;
+ section = (_cups_section_t *)cupsArrayNext(sections))
+ cupsArrayAdd(sections_files, section);
+
+ /*
+ * Then build three columns to hold everything, trying to balance the number of
+ * lines in each column...
+ */
+
+ for (column = 0; column < 3; column ++)
+ {
+ columns[column] = cupsArrayNew((cups_array_func_t)compare_sections, NULL);
+ lines[column] = 0;
+ }
+
+ for (section = (_cups_section_t *)cupsArrayFirst(sections_files);
+ section;
+ section = (_cups_section_t *)cupsArrayNext(sections_files))
+ {
+ for (min_column = 0, min_lines = lines[0], column = 1;
+ column < 3;
+ column ++)
+ {
+ if (lines[column] < min_lines)
+ {
+ min_column = column;
+ min_lines = lines[column];
+ }
+ }
+
+ cupsArrayAdd(columns[min_column], section);
+ lines[min_column] += cupsArrayCount(section->files) + 2;
+ }
+
+ /*
+ * Write the HTML file...
+ */
+
+ if ((fp = cupsFileOpen(path, "w")) == NULL)
+ {
+ fprintf(stderr, "makedocset: Unable to create %s: %s\n", path,
+ strerror(errno));
+ exit(1);
+ }
+
+ cupsFilePuts(fp, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 "
+ "Transitional//EN\" "
+ "\"http://www.w3.org/TR/html4/loose.dtd\">\n"
+ "<html>\n"
+ "<head>\n"
+ "<title>CUPS Documentation</title>\n"
+ "<link rel='stylesheet' type='text/css' "
+ "src='cups-printable.css'>\n"
+ "</head>\n"
+ "<body>\n"
+ "<h1>CUPS Documentation</h1>\n"
+ "<table width='100%' summary=''>\n"
+ "<tr>\n");
+
+ for (column = 0; column < 3; column ++)
+ {
+ if (column)
+ cupsFilePuts(fp, "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n");
+
+ cupsFilePuts(fp, "<td valign='top' width='33%'>");
+ for (section = (_cups_section_t *)cupsArrayFirst(columns[column]);
+ section;
+ section = (_cups_section_t *)cupsArrayNext(columns[column]))
+ {
+ cupsFilePrintf(fp, "<h2 class='title'>%s</h2>\n", section->name);
+ for (html = (_cups_html_t *)cupsArrayFirst(section->files);
+ html;
+ html = (_cups_html_t *)cupsArrayNext(section->files))
+ cupsFilePrintf(fp, "<p class='compact'><a href='%s'>%s</a></p>\n",
+ html->path, html->title);
+ }
+ cupsFilePuts(fp, "</td>\n");
+ }
+ cupsFilePuts(fp, "</tr>\n"
+ "</table>\n"
+ "</body>\n"
+ "</html>\n");
+ cupsFileClose(fp);
+}
+
+
+/*
+ * 'write_info()' - Write the Info.plist file.
+ */
+
+static void
+write_info(const char *path, /* I - File to write */
+ const char *revision) /* I - Version number */
+{
+ cups_file_t *fp; /* File */
+
+
+ if ((fp = cupsFileOpen(path, "w")) == NULL)
+ {
+ fprintf(stderr, "makedocset: Unable to create %s: %s\n", path,
+ strerror(errno));
+ exit(1);
+ }
+
+ cupsFilePrintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" "
+ "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n"
+ "<dict>\n"
+ "\t<key>CFBundleIdentifier</key>\n"
+ "\t<string>org.cups.docset</string>\n"
+ "\t<key>CFBundleName</key>\n"
+ "\t<string>CUPS Documentation</string>\n"
+ "\t<key>CFBundleVersion</key>\n"
+ "\t<string>1.4.%s</string>\n"
+ "\t<key>DocSetFeedName</key>\n"
+ "\t<string>cups.org</string>\n"
+ "\t<key>DocSetFeedURL</key>\n"
+ "\t<string>http://www.cups.org/org.cups.docset.xar"
+ "</string>\n"
+ "</dict>\n"
+ "</plist>\n", revision);
+
+ cupsFileClose(fp);
+}
+
+
+/*
+ * 'write_nodes()' - Write the Nodes.xml file.
+ */
+
+static void
+write_nodes(const char *path, /* I - File to write */
+ help_index_t *hi) /* I - Index of files */
+{
+ cups_file_t *fp; /* Output file */
+ int id; /* Current node ID */
+ help_node_t *node; /* Current help node */
+ int subnodes; /* Currently in Subnodes for file? */
+ int needclose; /* Need to close the current node? */
+
+
+ if ((fp = cupsFileOpen(path, "w")) == NULL)
+ {
+ fprintf(stderr, "makedocset: Unable to create %s: %s\n", path,
+ strerror(errno));
+ exit(1);
+ }
+
+ cupsFilePuts(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<DocSetNodes version=\"1.0\">\n"
+ "<TOC>\n"
+ "<Node id=\"0\">\n"
+ "<Name>CUPS Documentation</Name>\n"
+ "<Path>Documentation/index.html</Path>\n"
+ "</Node>\n");
+
+ for (node = (help_node_t *)cupsArrayFirst(hi->nodes), id = 1, subnodes = 0,
+ needclose = 0;
+ node;
+ node = (help_node_t *)cupsArrayNext(hi->nodes), id ++)
+ {
+ if (node->anchor)
+ {
+ if (!subnodes)
+ {
+ cupsFilePuts(fp, "<Subnodes>\n");
+ subnodes = 1;
+ }
+
+ cupsFilePrintf(fp, "<Node id=\"%d\">\n"
+ "<Path>Documentation/%s</Path>\n"
+ "<Anchor>%s</Anchor>\n"
+ "<Name>%s</Name>\n"
+ "</Node>\n", id, node->filename, node->anchor,
+ node->text);
+ }
+ else
+ {
+ if (subnodes)
+ {
+ cupsFilePuts(fp, "</Subnodes>\n");
+ subnodes = 0;
+ }
+
+ if (needclose)
+ cupsFilePuts(fp, "</Node>\n");
+
+ cupsFilePrintf(fp, "<Node id=\"%d\">\n"
+ "<Path>Documentation/%s</Path>\n"
+ "<Name>%s</Name>\n", id, node->filename, node->text);
+ needclose = 1;
+ }
+ }
+
+ if (subnodes)
+ cupsFilePuts(fp, "</Subnodes>\n");
+
+ if (needclose)
+ cupsFilePuts(fp, "</Node>\n");
+
+ cupsFilePuts(fp, "</TOC>\n"
+ "</DocSetNodes>\n");
+
+ cupsFileClose(fp);
+}
+
+
+/*
+ * End of "$Id$".
+ */
diff --git a/cgi-bin/var.c b/cgi-bin/var.c
index 6470fcbfd..628ce8add 100644
--- a/cgi-bin/var.c
+++ b/cgi-bin/var.c
@@ -806,6 +806,18 @@ cgi_initialize_post(void)
else
nbytes = 0;
}
+ else if (nbytes == 0)
+ {
+ /*
+ * CUPS STR #3176: OpenBSD: Early end-of-file on POST data causes 100% CPU
+ *
+ * This should never happen, but does on OpenBSD. If we see early end-of-
+ * file, treat this as an error and process no data.
+ */
+
+ free(data);
+ return (0);
+ }
data[length] = '\0';
diff --git a/config-scripts/cups-ssl.m4 b/config-scripts/cups-ssl.m4
index a3b4ccf9d..7e20ecd90 100644
--- a/config-scripts/cups-ssl.m4
+++ b/config-scripts/cups-ssl.m4
@@ -58,11 +58,11 @@ if test x$enable_ssl != xno; then
fi
dnl Then look for GNU TLS...
- if test "x${SSLLIBS}" = "x" -a "x${enable_gnutls}" != "xno"; then
+ if test "x${SSLLIBS}" = "x" -a "x${enable_gnutls}" != "xno" -a "x$PKGCONFIG" != x; then
AC_PATH_PROG(LIBGNUTLSCONFIG,libgnutls-config)
- if test "x$LIBGNUTLSCONFIG" != x; then
- SSLLIBS=`$LIBGNUTLSCONFIG --libs`
- SSLFLAGS=`$LIBGNUTLSCONFIG --cflags`
+ if $PKGCONFIG --exists gnutls; then
+ SSLLIBS=`$PKGCONFIG --libs gnutls`
+ SSLFLAGS=`$PKGCONFIG --cflags gnutls`
AC_DEFINE(HAVE_SSL)
AC_DEFINE(HAVE_GNUTLS)
fi
diff --git a/cups/Makefile b/cups/Makefile
index 31be2be31..dbdd2b91f 100644
--- a/cups/Makefile
+++ b/cups/Makefile
@@ -548,34 +548,52 @@ apihelp:
mxmldoc --section "Programming" --title "Array API" \
--css ../doc/cups-printable.css \
--header api-array.header --intro api-array.shtml \
+ api-array.xml \
array.h array.c >../doc/help/api-array.html
+ mxmldoc --tokens help/api-array.html api-array.xml >../doc/help/api-array.tokens
+ $(RM) api-array.xml
mxmldoc --section "Programming" --title "CUPS API" \
--css ../doc/cups-printable.css \
--header api-cups.header --intro api-cups.shtml \
+ api-cups.xml \
cups.h adminutil.c dest.c language.c notify.c \
options.c tempfile.c usersys.c \
util.c >../doc/help/api-cups.html
+ mxmldoc --tokens help/api-cups.html api-cups.xml >../doc/help/api-cups.tokens
+ $(RM) api-cups.xml
mxmldoc --section "Programming" --title "File and Directory APIs" \
--css ../doc/cups-printable.css \
--header api-filedir.header --intro api-filedir.shtml \
+ api-filedir.xml \
file.h file.c dir.h dir.c >../doc/help/api-filedir.html
+ mxmldoc --tokens api-filedir.xml >../doc/help/api-filedir.tokens
+ $(RM) api-filedir.xml
mxmldoc --section "Programming" --title "PPD API" \
--css ../doc/cups-printable.css \
--header api-ppd.header --intro api-ppd.shtml \
+ api-ppd.xml \
ppd.h attr.c conflicts.c custom.c emit.c localize.c mark.c page.c \
ppd.c >../doc/help/api-ppd.html
+ mxmldoc --tokens help/api-ppd.html api-ppd.xml >../doc/help/api-ppd.tokens
+ $(RM) api-ppd.xml
mxmldoc --section "Programming" --title "HTTP and IPP APIs" \
--css ../doc/cups-printable.css \
--header api-httpipp.header --intro api-httpipp.shtml \
+ api-httpipp.xml \
http.h ipp.h auth.c getdevices.c getputfile.c encode.c \
http.c http-addr.c http-support.c ipp.c ipp-support.c \
md5passwd.c request.c >../doc/help/api-httpipp.html
+ mxmldoc --tokens help/api-httpipp.html api-httpipp.xml >../doc/help/api-httpipp.tokens
+ $(RM) api-httpipp.xml
mxmldoc --section "Programming" \
--title "Filter and Backend Programming" \
--css ../doc/cups-printable.css \
--header api-filter.header --intro api-filter.shtml \
+ api-filter.xml \
backchannel.c backend.h backend.c sidechannel.c sidechannel.h \
>../doc/help/api-filter.html
+ mxmldoc --tokens help/api-filter.html api-filter.xml >../doc/help/api-filter.tokens
+ $(RM) api-filter.xml
framedhelp:
echo Generating CUPS API help files...
@@ -622,42 +640,6 @@ framedhelp:
backchannel.c backend.h backend.c sidechannel.c sidechannel.h
-docsets:
- echo Generating CUPS API documentation sets...
- ../tools/makedocset --docset org.cups.overview.docset \
- --title "Introduction to CUPS Programming" \
- --header api-overview.header --intro api-overview.shtml
- ../tools/makedocset --docset org.cups.array.docset \
- --title "Array API" \
- --header api-array.header --intro api-array.shtml \
- array.h array.c
- ../tools/makedocset --docset org.cups.cups.docset \
- --title "CUPS API" \
- --header api-cups.header --intro api-cups.shtml \
- cups.h adminutil.c dest.c language.c notify.c \
- options.c tempfile.c usersys.c \
- util.c
- ../tools/makedocset --docset org.cups.filedir.docset \
- --title "File and Directory APIs" \
- --header api-filedir.header --intro api-filedir.shtml \
- file.h file.c dir.h dir.c
- ../tools/makedocset --docset org.cups.ppd.docset \
- --title "PPD API" \
- --header api-ppd.header --intro api-ppd.shtml \
- ppd.h attr.c conflicts.c custom.c emit.c localize.c mark.c \
- page.c ppd.c
- ../tools/makedocset --docset org.cups.httpipp.docset \
- --title "HTTP and IPP APIs" \
- --header api-httpipp.header --intro api-httpipp.shtml \
- http.h ipp.h auth.c getdevices.c getputfile.c encode.c \
- http.c http-addr.c http-support.c ipp.c ipp-support.c \
- md5passwd.c request.c
- ../tools/makedocset --docset org.cups.filter.docset \
- --title "Filter and Backend Programming" \
- --header api-filter.header --intro api-filter.shtml \
- backchannel.c backend.h backend.c sidechannel.c sidechannel.h
-
-
#
# Dependencies...
#
diff --git a/cups/adminutil.c b/cups/adminutil.c
index a46d34f69..e2c5ea827 100644
--- a/cups/adminutil.c
+++ b/cups/adminutil.c
@@ -949,6 +949,8 @@ _cupsAdminGetServerSettings(
return (0);
}
}
+
+ http = cg->http;
}
if (!http || !num_settings || !settings)
diff --git a/cups/auth.c b/cups/auth.c
index da37c0bfc..ca877a398 100644
--- a/cups/auth.c
+++ b/cups/auth.c
@@ -83,10 +83,10 @@ static int cups_local_auth(http_t *http);
*/
int /* O - 0 on success, -1 on error */
-cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
- const char *method,/* I - Request method ("GET", "POST", "PUT") */
- const char *resource)
- /* I - Resource path */
+cupsDoAuthentication(
+ http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
+ const char *method, /* I - Request method ("GET", "POST", "PUT") */
+ const char *resource) /* I - Resource path */
{
const char *password; /* Password string */
char prompt[1024], /* Prompt for user */
@@ -103,6 +103,12 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS
DEBUG_printf(("2cupsDoAuthentication: WWW-Authenticate=\"%s\"",
httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE)));
+ if (!http)
+ http = _cupsConnect();
+
+ if (!http || !method || !resource)
+ return (-1);
+
/*
* Clear the current authentication string...
*/
@@ -126,7 +132,10 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS
return (0);
}
else if (localauth == -1)
+ {
+ http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1); /* Error or canceled */
+ }
}
/*
@@ -154,11 +163,17 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS
"Digest", 5) != 0;
http->userpass[0] = '\0';
- if ((password = cupsGetPassword(prompt)) == NULL)
+ if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
+ {
+ http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1);
+ }
if (!password[0])
+ {
+ http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1);
+ }
snprintf(http->userpass, sizeof(http->userpass), "%s:%s", cupsUser(),
password);
@@ -201,6 +216,8 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS
{
DEBUG_puts("1cupsDoAuthentication: Weak-linked GSSAPI/Kerberos framework "
"is not present");
+ http->status = HTTP_AUTHORIZATION_CANCELED;
+
return (-1);
}
# endif /* __APPLE__ */
@@ -209,6 +226,7 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS
{
DEBUG_printf(("1cupsDoAuthentication: too many Negotiate tries (%d)",
http->digest_tries));
+ http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1);
}
@@ -295,6 +313,8 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS
cups_gss_printf(major_status, minor_status,
"cupsDoAuthentication: Unable to initialize security "
"context");
+ http->status = HTTP_AUTHORIZATION_CANCELED;
+
return (-1);
}
@@ -331,7 +351,7 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS
{
DEBUG_printf(("1cupsDoAuthentication: Kerberos credentials too large - "
"%d bytes!", (int)output_token.length));
-
+ http->status = HTTP_AUTHORIZATION_CANCELED;
gss_release_buffer(&minor_status, &output_token);
return (-1);
@@ -595,6 +615,37 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
}
# endif /* HAVE_AUTHORIZATION_H */
+# if defined(SO_PEERCRED) && defined(AF_LOCAL)
+ /*
+ * See if we can authenticate using the peer credentials provided over a
+ * domain socket; if so, specify "PeerCred username" as the authentication
+ * information...
+ */
+
+ if (http->hostaddr->addr.sa_family == AF_LOCAL &&
+ !getenv("GATEWAY_INTERFACE")) /* Not via CGI programs... */
+ {
+ /*
+ * Verify that the current cupsUser() matches the current UID...
+ */
+
+ struct passwd *pwd; /* Password information */
+ const char *username; /* Current username */
+
+ username = cupsUser();
+
+ if ((pwd = getpwnam(username)) != NULL && pwd->pw_uid == getuid())
+ {
+ httpSetAuthString(http, "PeerCred", username);
+
+ DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"",
+ http->authstring));
+
+ return (0);
+ }
+ }
+# endif /* SO_PEERCRED && AF_LOCAL */
+
/*
* Try opening a certificate file for this PID. If that fails,
* try the root certificate...
@@ -657,37 +708,6 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
return (0);
}
-# if defined(SO_PEERCRED) && defined(AF_LOCAL)
- /*
- * See if we can authenticate using the peer credentials provided over a
- * domain socket; if so, specify "PeerCred username" as the authentication
- * information...
- */
-
- if (http->hostaddr->addr.sa_family == AF_LOCAL &&
- !getenv("GATEWAY_INTERFACE")) /* Not via CGI programs... */
- {
- /*
- * Verify that the current cupsUser() matches the current UID...
- */
-
- struct passwd *pwd; /* Password information */
- const char *username; /* Current username */
-
- username = cupsUser();
-
- if ((pwd = getpwnam(username)) != NULL && pwd->pw_uid == getuid())
- {
- httpSetAuthString(http, "PeerCred", username);
-
- DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"",
- http->authstring));
-
- return (0);
- }
- }
-# endif /* SO_PEERCRED && AF_LOCAL */
-
return (1);
#endif /* WIN32 || __EMX__ */
}
diff --git a/cups/cups.h b/cups/cups.h
index 8836aab94..a4f92e877 100644
--- a/cups/cups.h
+++ b/cups/cups.h
@@ -125,6 +125,12 @@ enum cups_ptype_e /**** Printer type/capability bit constants ****/
typedef const char *(*cups_password_cb_t)(const char *prompt);
/**** Password callback ****/
+typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http,
+ const char *method,
+ const char *resource,
+ void *user_data);
+ /**** New password callback @since CUPS 1.4@ ****/
+
typedef void (*cups_device_cb_t)(const char *device_class,
const char *device_id, const char *device_info,
const char *device_make_and_model,
@@ -294,6 +300,9 @@ extern ipp_status_t cupsGetDevices(http_t *http, int timeout,
void *user_data) _CUPS_API_1_4;
extern cups_dest_t *cupsGetNamedDest(http_t *http, const char *name,
const char *instance) _CUPS_API_1_4;
+extern const char *cupsGetPassword2(const char *prompt, http_t *http,
+ const char *method,
+ const char *resource) _CUPS_API_1_4;
extern http_status_t cupsGetPPD3(http_t *http, const char *name,
time_t *modtime, char *buffer,
size_t bufsize) _CUPS_API_1_4;
@@ -309,6 +318,8 @@ extern int cupsResolveConflicts(ppd_file_t *ppd, const char *option,
extern http_status_t cupsSendRequest(http_t *http, ipp_t *request,
const char *resource,
size_t length) _CUPS_API_1_4;
+extern void cupsSetPasswordCB2(cups_password_cb2_t cb,
+ void *user_data) _CUPS_API_1_4;
extern http_status_t cupsStartDocument(http_t *http, const char *name,
int job_id, const char *docname,
const char *format,
diff --git a/cups/debug.c b/cups/debug.c
index cd622c961..74f77ffd4 100644
--- a/cups/debug.c
+++ b/cups/debug.c
@@ -38,6 +38,8 @@
int _cups_debug_fd = -1;
/* Debug log file descriptor */
+int _cups_debug_level = 1;
+ /* Log level (0 to 9) */
#ifdef DEBUG
@@ -47,9 +49,8 @@ int _cups_debug_fd = -1;
static regex_t *debug_filter = NULL;
/* Filter expression for messages */
-static int debug_init = 1; /* Did we initialize debugging? */
+static int debug_init = 0; /* Did we initialize debugging? */
# ifdef HAVE_PTHREAD_H
-static int debug_level = 0;/* Log level (0 to 9) */
static pthread_mutex_t debug_mutex = PTHREAD_MUTEX_INITIALIZER;
/* Mutex to control initialization */
# endif /* HAVE_PTHREAD_H */
@@ -420,8 +421,6 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
if (!debug_init)
{
- debug_init = 1;
-
if ((cups_debug_log = getenv("CUPS_DEBUG_LOG")) == NULL)
_cups_debug_fd = -1;
else if (!strcmp(cups_debug_log, "-"))
@@ -429,11 +428,15 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
else
{
snprintf(buffer, sizeof(buffer), cups_debug_log, getpid());
- _cups_debug_fd = open(buffer, O_WRONLY | O_APPEND | O_CREAT, 0644);
+
+ if (buffer[0] == '+')
+ _cups_debug_fd = open(buffer + 1, O_WRONLY | O_APPEND | O_CREAT, 0644);
+ else
+ _cups_debug_fd = open(buffer, O_WRONLY | O_TRUNC | O_CREAT, 0644);
}
if ((cups_debug_level = getenv("CUPS_DEBUG_LEVEL")) != NULL)
- debug_level = atoi(cups_debug_level);
+ _cups_debug_level = atoi(cups_debug_level);
if ((cups_debug_filter = getenv("CUPS_DEBUG_FILTER")) != NULL)
{
@@ -448,6 +451,8 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
debug_filter = NULL;
}
}
+
+ debug_init = 1;
}
pthread_mutex_unlock(&debug_mutex);
@@ -465,7 +470,7 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
else
level = 0;
- if (level > debug_level)
+ if (level > _cups_debug_level)
return;
if (debug_filter)
diff --git a/cups/debug.h b/cups/debug.h
index e13335bfc..e051be4f7 100644
--- a/cups/debug.h
+++ b/cups/debug.h
@@ -70,6 +70,7 @@ extern "C" {
*/
extern int _cups_debug_fd;
+extern int _cups_debug_level;
extern void _cups_debug_printf(const char *format, ...)
#ifdef __GNUC__
__attribute__ ((__format__ (__printf__, 1, 2)))
diff --git a/cups/emit.c b/cups/emit.c
index 922c8b917..82c07f66e 100644
--- a/cups/emit.c
+++ b/cups/emit.c
@@ -1111,17 +1111,32 @@ static void
ppd_handle_media(ppd_file_t *ppd) /* I - PPD file */
{
ppd_choice_t *manual_feed, /* ManualFeed choice, if any */
- *input_slot, /* InputSlot choice, if any */
- *page; /* PageSize/PageRegion */
+ *input_slot; /* InputSlot choice, if any */
ppd_size_t *size; /* Current media size */
ppd_attr_t *rpr; /* RequiresPageRegion value */
/*
- * This function determines if the user has selected a media source
- * via the InputSlot or ManualFeed options; if so, it marks the
- * PageRegion option corresponding to the current media size.
- * Otherwise it marks the PageSize option.
+ * This function determines what page size code to use, if any, for the
+ * current media size, InputSlot, and ManualFeed selections.
+ *
+ * We use the PageSize code if:
+ *
+ * 1. A custom media size is selected.
+ * 2. ManualFeed and InputSlot are not selected (or do not exist).
+ * 3. ManualFeed is selected but is False and InputSlot is not selected or
+ * the selection has no code - the latter check done to support "auto" or
+ * "printer default" InputSlot options.
+ *
+ * We use the PageRegion code if:
+ *
+ * 4. RequiresPageRegion does not exist and the PPD contains cupsFilter
+ * keywords, indicating this is a CUPS-based driver.
+ * 5. RequiresPageRegion exists for the selected InputSlot (or "All" for any
+ * InputSlot or ManualFeed selection) and is True.
+ *
+ * If none of the 5 conditions are true, no page size code is used and we
+ * unmark any existing PageSize or PageRegion choices.
*/
if ((size = ppdPageSize(ppd, NULL)) == NULL)
@@ -1138,46 +1153,52 @@ ppd_handle_media(ppd_file_t *ppd) /* I - PPD file */
if (!rpr)
rpr = ppdFindAttr(ppd, "RequiresPageRegion", "All");
- if (!strcasecmp(size->name, "Custom") || (!manual_feed && !input_slot) ||
- !((manual_feed && !strcasecmp(manual_feed->choice, "True")) ||
- (input_slot && input_slot->code && input_slot->code[0])))
+ if (!strcasecmp(size->name, "Custom") ||
+ (!manual_feed && !input_slot) ||
+ (manual_feed && !strcasecmp(manual_feed->choice, "False") &&
+ (!input_slot || (input_slot->code && !input_slot->code[0]))))
{
/*
- * Manual feed was not selected and/or the input slot selection does
- * not contain any PostScript code. Use the PageSize option...
+ * Use PageSize code...
*/
ppdMarkOption(ppd, "PageSize", size->name);
}
- else
+ else if ((rpr && rpr->value && !strcasecmp(rpr->value, "True")) ||
+ (!rpr && ppd->num_filters > 0))
{
/*
- * Manual feed was selected and/or the input slot selection contains
- * PostScript code. Use the PageRegion option...
+ * Use PageRegion code...
*/
ppdMarkOption(ppd, "PageRegion", size->name);
-
+ }
+ else
+ {
/*
- * RequiresPageRegion does not apply to manual feed so we need to
- * check that we are not doing manual feed before unmarking PageRegion.
+ * Do not use PageSize or PageRegion code...
*/
- if (!(manual_feed && !strcasecmp(manual_feed->choice, "True")) &&
- ((rpr && rpr->value && !strcmp(rpr->value, "False")) ||
- (!rpr && !ppd->num_filters)))
+ ppd_choice_t *page; /* PageSize/Region choice, if any */
+
+ if ((page = ppdFindMarkedChoice(ppd, "PageSize")) != NULL)
{
/*
- * Either the PPD file specifies no PageRegion code or the PPD file
- * not for a CUPS raster driver and thus defaults to no PageRegion
- * code... Unmark the PageRegion choice so that we don't output the
- * code...
+ * Unmark PageSize...
*/
- page = ppdFindMarkedChoice(ppd, "PageRegion");
+ page->marked = 0;
+ cupsArrayRemove(ppd->marked, page);
+ }
+
+ if ((page = ppdFindMarkedChoice(ppd, "PageRegion")) != NULL)
+ {
+ /*
+ * Unmark PageRegion...
+ */
- if (page)
- page->marked = 0;
+ page->marked = 0;
+ cupsArrayRemove(ppd->marked, page);
}
}
}
diff --git a/cups/getdevices.c b/cups/getdevices.c
index 44500d3fc..81f885912 100644
--- a/cups/getdevices.c
+++ b/cups/getdevices.c
@@ -134,7 +134,10 @@ cupsGetDevices(
if (!cupsDoAuthentication(http, "POST", "/"))
httpReconnect(http);
else
+ {
+ status = HTTP_AUTHORIZATION_CANCELED;
break;
+ }
}
#ifdef HAVE_SSL
diff --git a/cups/getputfile.c b/cups/getputfile.c
index 43952dc1f..a8be5aca0 100644
--- a/cups/getputfile.c
+++ b/cups/getputfile.c
@@ -123,7 +123,10 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
*/
if (cupsDoAuthentication(http, "GET", resource))
+ {
+ status = HTTP_AUTHORIZATION_CANCELED;
break;
+ }
if (httpReconnect(http))
{
@@ -390,7 +393,10 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
*/
if (cupsDoAuthentication(http, "PUT", resource))
+ {
+ status = HTTP_AUTHORIZATION_CANCELED;
break;
+ }
if (httpReconnect(http))
{
diff --git a/cups/globals.c b/cups/globals.c
index fc7d6807b..e9e863313 100644
--- a/cups/globals.c
+++ b/cups/globals.c
@@ -112,7 +112,7 @@ _cupsGlobals(void)
*/
globals->encryption = (http_encryption_t)-1;
- globals->password_cb = _cupsGetPassword;
+ globals->password_cb = (cups_password_cb2_t)_cupsGetPassword;
cups_env_init(globals);
}
diff --git a/cups/globals.h b/cups/globals.h
index 89139367f..fecbeb3d7 100644
--- a/cups/globals.h
+++ b/cups/globals.h
@@ -120,7 +120,8 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
char user[65], /* User name */
server[256], /* Server address */
servername[256];/* Server hostname */
- cups_password_cb_t password_cb; /* Password callback */
+ cups_password_cb2_t password_cb; /* Password callback */
+ void *password_data; /* Password user data */
/* util.c */
http_t *http; /* Current server connection */
diff --git a/cups/http-support.c b/cups/http-support.c
index baa45c122..cd78c628b 100644
--- a/cups/http-support.c
+++ b/cups/http-support.c
@@ -1210,6 +1210,7 @@ httpStatus(http_status_t status) /* I - HTTP status code */
s = _("Bad Request");
break;
case HTTP_UNAUTHORIZED :
+ case HTTP_AUTHORIZATION_CANCELED :
s = _("Unauthorized");
break;
case HTTP_FORBIDDEN :
@@ -1460,9 +1461,9 @@ _httpResolveURI(
if (logit)
{
if (uri)
- fputs("DEBUG: Unable to resolve URI!\n", stderr);
- else
fprintf(stderr, "DEBUG: Resolved as \"%s\"...\n", uri);
+ else
+ fputs("DEBUG: Unable to resolve URI!\n", stderr);
fputs("STATE: -connecting-to-device\n", stderr);
}
@@ -1637,7 +1638,7 @@ resolve_callback(
* Figure out the scheme from the full name...
*/
- if (strstr(fullName, "._ipp"))
+ if (strstr(fullName, "._ipp") || strstr(fullName, "._fax-ipp"))
scheme = "ipp";
else if (strstr(fullName, "._printer."))
scheme = "lpd";
diff --git a/cups/http.c b/cups/http.c
index e5920fa3f..a717f80c0 100644
--- a/cups/http.c
+++ b/cups/http.c
@@ -181,6 +181,25 @@ static const char * const http_fields[] =
"User-Agent",
"WWW-Authenticate"
};
+#ifdef DEBUG
+static const char * const http_states[] =
+ {
+ "HTTP_WAITING",
+ "HTTP_OPTIONS",
+ "HTTP_GET",
+ "HTTP_GET_SEND",
+ "HTTP_HEAD",
+ "HTTP_POST",
+ "HTTP_POST_RECV",
+ "HTTP_POST_SEND",
+ "HTTP_PUT",
+ "HTTP_PUT_RECV",
+ "HTTP_DELETE",
+ "HTTP_TRACE",
+ "HTTP_CLOSE",
+ "HTTP_STATUS"
+ };
+#endif /* DEBUG */
#if defined(HAVE_SSL) && defined(HAVE_LIBSSL)
@@ -545,7 +564,8 @@ httpFlush(http_t *http) /* I - Connection to server */
int blocking; /* To block or not to block */
- DEBUG_printf(("httpFlush(http=%p), state=%d", http, http->state));
+ DEBUG_printf(("httpFlush(http=%p), state=%s", http,
+ http_states[http->state]));
/*
* Temporarily set non-blocking mode so we don't get stuck in httpRead()...
@@ -757,7 +777,8 @@ httpGetLength(http_t *http) /* I - Connection to server */
off_t /* O - Content length */
httpGetLength2(http_t *http) /* I - Connection to server */
{
- DEBUG_printf(("2httpGetLength2(http=%p), state=%d", http, http->state));
+ DEBUG_printf(("2httpGetLength2(http=%p), state=%s", http,
+ http_states[http->state]));
if (!http)
return (-1);
@@ -996,10 +1017,11 @@ httpGets(char *line, /* I - Line to read into */
/*
* Read a line from the buffer...
*/
-
- lineptr = line;
- lineend = line + length - 1;
- eol = 0;
+
+ http->error = 0;
+ lineptr = line;
+ lineend = line + length - 1;
+ eol = 0;
while (lineptr < lineend)
{
@@ -1328,6 +1350,7 @@ httpRead2(http_t *http, /* I - Connection to server */
return (-1);
http->activity = time(NULL);
+ http->error = 0;
if (length <= 0)
return (0);
@@ -1866,18 +1889,38 @@ httpSetField(http_t *http, /* I - Connection to server */
else if (field == HTTP_FIELD_HOST)
{
/*
- * Special-case for Host: as we don't want a trailing "." on the hostname.
+ * Special-case for Host: as we don't want a trailing "." on the hostname and
+ * need to bracket IPv6 numeric addresses.
*/
- char *ptr = http->fields[HTTP_FIELD_HOST];
- /* Pointer into Host: field */
+ if (strchr(value, ':'))
+ {
+ /*
+ * Bracket IPv6 numeric addresses...
+ *
+ * This is slightly inefficient (basically copying twice), but is an edge
+ * case and not worth optimizing...
+ */
- if (*ptr)
+ snprintf(http->fields[HTTP_FIELD_HOST],
+ sizeof(http->fields[HTTP_FIELD_HOST]), "[%s]", value);
+ }
+ else
{
- ptr += strlen(ptr) - 1;
+ /*
+ * Check for a trailing dot on the hostname...
+ */
+
+ char *ptr = http->fields[HTTP_FIELD_HOST];
+ /* Pointer into Host: field */
+
+ if (*ptr)
+ {
+ ptr += strlen(ptr) - 1;
- if (*ptr == '.')
- *ptr = '\0';
+ if (*ptr == '.')
+ *ptr = '\0';
+ }
}
}
}
@@ -1936,7 +1979,8 @@ httpUpdate(http_t *http) /* I - Connection to server */
status; /* Request status */
- DEBUG_printf(("httpUpdate(http=%p), state=%d", http, http->state));
+ DEBUG_printf(("httpUpdate(http=%p), state=%s", http,
+ http_states[http->state]));
/*
* Flush pending data, if any...
@@ -2604,12 +2648,12 @@ http_debug_hex(const char *prefix, /* I - Prefix for line */
*ptr; /* Pointer into line */
- if (_cups_debug_fd < 0)
+ if (_cups_debug_fd < 0 || _cups_debug_level < 6)
return;
DEBUG_printf(("6%s: %d bytes:\n", prefix, bytes));
- snprintf(line, sizeof(line), "%s: ", prefix);
+ snprintf(line, sizeof(line), "6%s: ", prefix);
start = line + strlen(line);
for (i = 0; i < bytes; i += 16)
@@ -3164,14 +3208,15 @@ http_upgrade(http_t *http) /* I - Connection to server */
static int /* O - Number of bytes written */
http_write(http_t *http, /* I - Connection to server */
- const char *buffer, /* I - Buffer for data */
- int length) /* I - Number of bytes to write */
+ const char *buffer, /* I - Buffer for data */
+ int length) /* I - Number of bytes to write */
{
int tbytes, /* Total bytes sent */
bytes; /* Bytes sent */
- tbytes = 0;
+ http->error = 0;
+ tbytes = 0;
while (length > 0)
{
@@ -3230,6 +3275,7 @@ http_write_chunk(http_t *http, /* I - Connection to server */
char header[255]; /* Chunk header */
int bytes; /* Bytes written */
+
DEBUG_printf(("7http_write_chunk(http=%p, buffer=%p, length=%d)",
http, buffer, length));
diff --git a/cups/http.h b/cups/http.h
index 0c51578d7..70ffe4d3a 100644
--- a/cups/http.h
+++ b/cups/http.h
@@ -248,7 +248,10 @@ typedef enum http_status_e /**** HTTP status codes ****/
HTTP_BAD_GATEWAY, /* Bad gateway */
HTTP_SERVICE_UNAVAILABLE, /* Service is unavailable */
HTTP_GATEWAY_TIMEOUT, /* Gateway connection timed out */
- HTTP_NOT_SUPPORTED /* HTTP version not supported */
+ HTTP_NOT_SUPPORTED, /* HTTP version not supported */
+
+ HTTP_AUTHORIZATION_CANCELED = 1000 /* User cancelled authorization */
+
} http_status_t;
typedef enum http_uri_status_e /**** URI separation status @since CUPS1.2@ ****/
diff --git a/cups/ipp.c b/cups/ipp.c
index 021a56e11..c3e8a8f12 100644
--- a/cups/ipp.c
+++ b/cups/ipp.c
@@ -1148,7 +1148,7 @@ ippReadIO(void *src, /* I - Data source */
return (IPP_ERROR);
}
- DEBUG_printf(("1ippReadIO: ipp->current=%p, ipp->prev=%p",
+ DEBUG_printf(("2ippReadIO: ipp->current=%p, ipp->prev=%p",
ipp->current, ipp->prev));
/*
diff --git a/cups/language.c b/cups/language.c
index 39ef43569..e162bfe13 100644
--- a/cups/language.c
+++ b/cups/language.c
@@ -429,7 +429,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
};
- DEBUG_printf(("cupsLangGet(language=\"%s\")", language));
+ DEBUG_printf(("2cupsLangGet(language=\"%s\")", language));
#ifdef __APPLE__
/*
@@ -448,7 +448,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
if ((language = getenv("LANG")) == NULL)
language = appleLangDefault();
- DEBUG_printf(("2cupsLangGet: language=\"%s\"", language));
+ DEBUG_printf(("4cupsLangGet: language=\"%s\"", language));
}
#else
@@ -477,7 +477,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
ptr = setlocale(LC_ALL, NULL);
# endif /* LC_MESSAGES */
- DEBUG_printf(("2cupsLangGet: current locale is \"%s\"", ptr));
+ DEBUG_printf(("4cupsLangGet: current locale is \"%s\"", ptr));
if (!ptr || !strcmp(ptr, "C") || !strcmp(ptr, "POSIX"))
{
@@ -525,7 +525,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
if (!strncmp(locale, "nb", 2))
locale[1] = 'o';
- DEBUG_printf(("2cupsLangGet: new language value is \"%s\"", language));
+ DEBUG_printf(("4cupsLangGet: new language value is \"%s\"", language));
}
}
#endif /* __APPLE__ */
@@ -562,7 +562,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
*ptr = '\0';
- DEBUG_printf(("2cupsLangGet: charset set to \"%s\" via "
+ DEBUG_printf(("4cupsLangGet: charset set to \"%s\" via "
"nl_langinfo(CODESET)...", charset));
}
#endif /* CODESET */
@@ -642,7 +642,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
}
}
- DEBUG_printf(("2cupsLangGet: langname=\"%s\", country=\"%s\", charset=\"%s\"",
+ DEBUG_printf(("4cupsLangGet: langname=\"%s\", country=\"%s\", charset=\"%s\"",
langname, country, charset));
/*
@@ -680,7 +680,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
}
}
- DEBUG_printf(("2cupsLangGet: encoding=%d(%s)", encoding,
+ DEBUG_printf(("4cupsLangGet: encoding=%d(%s)", encoding,
encoding == CUPS_AUTO_ENCODING ? "auto" :
lang_encodings[encoding]));
@@ -711,7 +711,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
pthread_mutex_unlock(&lang_mutex);
#endif /* HAVE_PTHREAD_H */
- DEBUG_printf(("1cupsLangGet: Using cached copy of \"%s\"...", real));
+ DEBUG_printf(("3cupsLangGet: Using cached copy of \"%s\"...", real));
return (lang);
}
@@ -731,7 +731,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
* No generic localization, so use POSIX...
*/
- DEBUG_printf(("2cupsLangGet: access(\"%s\", 0): %s", filename,
+ DEBUG_printf(("4cupsLangGet: access(\"%s\", 0): %s", filename,
strerror(errno)));
snprintf(filename, sizeof(filename), "%s/C/cups_C.po", cg->localedir);
diff --git a/cups/libcups.exp b/cups/libcups.exp
index 4bb5cd67a..16fa94d1d 100644
--- a/cups/libcups.exp
+++ b/cups/libcups.exp
@@ -154,6 +154,7 @@ _cupsGetJobs2
_cupsGetNamedDest
_cupsGetOption
_cupsGetPassword
+_cupsGetPassword2
_cupsGetPPD
_cupsGetPPD2
_cupsGetPPD3
@@ -188,6 +189,7 @@ _cupsSetDests
_cupsSetDests2
_cupsSetEncryption
_cupsSetPasswordCB
+_cupsSetPasswordCB2
_cupsSetServer
_cupsSetUser
_cupsSideChannelDoRequest
diff --git a/cups/localize.c b/cups/localize.c
index 07cfe8a55..8520e9310 100644
--- a/cups/localize.c
+++ b/cups/localize.c
@@ -52,7 +52,7 @@
* Local functions...
*/
-static void ppd_ll_CC(char *ll_CC, int ll_CC_size);
+static cups_lang_t *ppd_ll_CC(char *ll_CC, int ll_CC_size);
/*
@@ -258,6 +258,7 @@ ppdLocalizeIPPReason(
char *buffer, /* I - Value buffer */
size_t bufsize) /* I - Size of value buffer */
{
+ cups_lang_t *lang; /* Current language */
ppd_attr_t *locattr; /* Localized attribute */
char ll_CC[6], /* Language + country locale */
*bufptr, /* Pointer into buffer */
@@ -282,7 +283,7 @@ ppdLocalizeIPPReason(
* Get the default language...
*/
- ppd_ll_CC(ll_CC, sizeof(ll_CC));
+ lang = ppd_ll_CC(ll_CC, sizeof(ll_CC));
/*
* Find the localized attribute...
@@ -293,7 +294,77 @@ ppdLocalizeIPPReason(
locattr = ppdFindAttr(ppd, "cupsIPPReason", reason);
if (!locattr)
+ {
+ if (lang && (!scheme || !strcmp(scheme, "text")))
+ {
+ /*
+ * Try to localize a standard printer-state-reason keyword...
+ */
+
+ const char *message = NULL; /* Localized message */
+
+
+ if (!strncmp(reason, "media-needed", 12))
+ message = _("Media tray needs to be filled.");
+ else if (!strncmp(reason, "media-jam", 9))
+ message = _("Media jam!");
+ else if (!strncmp(reason, "moving-to-paused", 16) ||
+ !strncmp(reason, "offline", 7) ||
+ !strncmp(reason, "paused", 6) ||
+ !strncmp(reason, "shutdown", 8))
+ message = _("Printer offline.");
+ else if (!strncmp(reason, "toner-low", 9))
+ message = _("Toner low.");
+ else if (!strncmp(reason, "toner-empty", 11))
+ message = _("Out of toner!");
+ else if (!strncmp(reason, "cover-open", 10))
+ message = _("Cover open.");
+ else if (!strncmp(reason, "interlock-open", 14))
+ message = _("Interlock open.");
+ else if (!strncmp(reason, "door-open", 9))
+ message = _("Door open.");
+ else if (!strncmp(reason, "input-tray-missing", 18))
+ message = _("Media tray missing!");
+ else if (!strncmp(reason, "media-low", 9))
+ message = _("Media tray almost empty.");
+ else if (!strncmp(reason, "media-empty", 11))
+ message = _("Media tray empty!");
+ else if (!strncmp(reason, "output-tray-missing", 19))
+ message = _("Output tray missing!");
+ else if (!strncmp(reason, "output-area-almost-full", 23))
+ message = _("Output bin almost full.");
+ else if (!strncmp(reason, "output-area-full", 16))
+ message = _("Output bin full!");
+ else if (!strncmp(reason, "marker-supply-low", 17))
+ message = _("Ink/toner almost empty.");
+ else if (!strncmp(reason, "marker-supply-empty", 19))
+ message = _("Ink/toner empty!");
+ else if (!strncmp(reason, "marker-waste-almost-full", 24))
+ message = _("Ink/toner waste bin almost full.");
+ else if (!strncmp(reason, "marker-waste-full", 17))
+ message = _("Ink/toner waste bin full!");
+ else if (!strncmp(reason, "fuser-over-temp", 15))
+ message = _("Fuser temperature high!");
+ else if (!strncmp(reason, "fuser-under-temp", 16))
+ message = _("Fuser temperature low!");
+ else if (!strncmp(reason, "opc-near-eol", 12))
+ message = _("OPC almost at end-of-life.");
+ else if (!strncmp(reason, "opc-life-over", 13))
+ message = _("OPC at end-of-life!");
+ else if (!strncmp(reason, "developer-low", 13))
+ message = _("Developer almost empty.");
+ else if (!strncmp(reason, "developer-empty", 15))
+ message = _("Developer empty!");
+
+ if (message)
+ {
+ strlcpy(buffer, _cupsLangString(lang, message), bufsize);
+ return (buffer);
+ }
+ }
+
return (NULL);
+ }
/*
* Now find the value we need...
@@ -659,7 +730,7 @@ _ppdLocalizedAttr(ppd_file_t *ppd, /* I - PPD file */
* 'ppd_ll_CC()' - Get the current locale names.
*/
-static void
+static cups_lang_t * /* O - Current language */
ppd_ll_CC(char *ll_CC, /* O - Country-specific locale name */
int ll_CC_size) /* I - Size of country-specific name */
{
@@ -673,7 +744,7 @@ ppd_ll_CC(char *ll_CC, /* O - Country-specific locale name */
if ((lang = cupsLangDefault()) == NULL)
{
strlcpy(ll_CC, "en_US", ll_CC_size);
- return;
+ return (NULL);
}
/*
@@ -703,6 +774,7 @@ ppd_ll_CC(char *ll_CC, /* O - Country-specific locale name */
DEBUG_printf(("8ppd_ll_CC: lang->language=\"%s\", ll_CC=\"%s\"...",
lang->language, ll_CC));
+ return (lang);
}
diff --git a/cups/options.c b/cups/options.c
index ecc210e0b..23e4dff1c 100644
--- a/cups/options.c
+++ b/cups/options.c
@@ -3,7 +3,7 @@
*
* Option routines for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -61,12 +61,12 @@ cupsAddOption(const char *name, /* I - Name of option */
diff; /* Result of search */
- DEBUG_printf(("cupsAddOption(name=\"%s\", value=\"%s\", num_options=%d, "
+ DEBUG_printf(("2cupsAddOption(name=\"%s\", value=\"%s\", num_options=%d, "
"options=%p)", name, value, num_options, options));
if (!name || !name[0] || !value || !options || num_options < 0)
{
- DEBUG_printf(("1cupsAddOption: Returning %d", num_options));
+ DEBUG_printf(("3cupsAddOption: Returning %d", num_options));
return (num_options);
}
@@ -94,7 +94,7 @@ cupsAddOption(const char *name, /* I - Name of option */
* No matching option name...
*/
- DEBUG_printf(("2cupsAddOption: New option inserted at index %d...",
+ DEBUG_printf(("4cupsAddOption: New option inserted at index %d...",
insert));
if (num_options == 0)
@@ -105,7 +105,7 @@ cupsAddOption(const char *name, /* I - Name of option */
if (temp == NULL)
{
- DEBUG_puts("1cupsAddOption: Unable to expand option array, returning 0");
+ DEBUG_puts("3cupsAddOption: Unable to expand option array, returning 0");
return (0);
}
@@ -113,7 +113,7 @@ cupsAddOption(const char *name, /* I - Name of option */
if (insert < num_options)
{
- DEBUG_printf(("2cupsAddOption: Shifting %d options...",
+ DEBUG_printf(("4cupsAddOption: Shifting %d options...",
(int)(num_options - insert)));
memmove(temp + insert + 1, temp + insert,
(num_options - insert) * sizeof(cups_option_t));
@@ -129,7 +129,7 @@ cupsAddOption(const char *name, /* I - Name of option */
* Match found; free the old value...
*/
- DEBUG_printf(("2cupsAddOption: Option already exists at index %d...",
+ DEBUG_printf(("4cupsAddOption: Option already exists at index %d...",
insert));
temp = *options + insert;
@@ -138,7 +138,7 @@ cupsAddOption(const char *name, /* I - Name of option */
temp->value = _cupsStrAlloc(value);
- DEBUG_printf(("1cupsAddOption: Returning %d", num_options));
+ DEBUG_printf(("3cupsAddOption: Returning %d", num_options));
return (num_options);
}
@@ -452,7 +452,7 @@ cupsRemoveOption(
cups_option_t *option; /* Current option */
- DEBUG_printf(("cupsRemoveOption(name=\"%s\", num_options=%d, options=%p)",
+ DEBUG_printf(("2cupsRemoveOption(name=\"%s\", num_options=%d, options=%p)",
name, num_options, options));
/*
@@ -461,7 +461,7 @@ cupsRemoveOption(
if (!name || num_options < 1 || !options)
{
- DEBUG_printf(("1cupsRemoveOption: Returning %d", num_options));
+ DEBUG_printf(("3cupsRemoveOption: Returning %d", num_options));
return (num_options);
}
@@ -479,7 +479,7 @@ cupsRemoveOption(
* Remove this option from the array...
*/
- DEBUG_puts("2cupsRemoveOption: Found option, removing it...");
+ DEBUG_puts("4cupsRemoveOption: Found option, removing it...");
num_options --;
i --;
@@ -495,7 +495,7 @@ cupsRemoveOption(
* Return the new number of options...
*/
- DEBUG_printf(("1cupsRemoveOption: Returning %d", num_options));
+ DEBUG_printf(("3cupsRemoveOption: Returning %d", num_options));
return (num_options);
}
diff --git a/cups/page.c b/cups/page.c
index 21ee3ab25..8616c25e0 100644
--- a/cups/page.c
+++ b/cups/page.c
@@ -50,11 +50,11 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
ppd_cparam_t *cparam; /* Custom option parameter */
- DEBUG_printf(("ppdPageSize(ppd=%p, name=\"%s\")", ppd, name));
+ DEBUG_printf(("2ppdPageSize(ppd=%p, name=\"%s\")", ppd, name));
if (!ppd)
{
- DEBUG_puts("1ppdPageSize: Bad PPD pointer, returning NULL...");
+ DEBUG_puts("3ppdPageSize: Bad PPD pointer, returning NULL...");
return (NULL);
}
@@ -72,7 +72,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
if (!i)
{
- DEBUG_puts("1ppdPageSize: No custom sizes, returning NULL...");
+ DEBUG_puts("3ppdPageSize: No custom sizes, returning NULL...");
return (NULL);
}
@@ -144,7 +144,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
* Return the page size...
*/
- DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
+ DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
size->name, size->width, size->length));
return (size);
@@ -158,7 +158,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
if (!strcasecmp(name, size->name))
{
- DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
+ DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
size->name, size->width, size->length));
return (size);
@@ -174,14 +174,14 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
if (size->marked)
{
- DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
+ DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
size->name, size->width, size->length));
return (size);
}
}
- DEBUG_puts("1ppdPageSize: Size not found, returning NULL");
+ DEBUG_puts("3ppdPageSize: Size not found, returning NULL");
return (NULL);
}
diff --git a/cups/request.c b/cups/request.c
index 68b35c645..615ef22a2 100644
--- a/cups/request.c
+++ b/cups/request.c
@@ -264,6 +264,8 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
status = http->status;
}
+ DEBUG_printf(("2cupsDoIORequest: status=%d", status));
+
if (status == HTTP_FORBIDDEN || status == HTTP_ERROR ||
status >= HTTP_SERVER_ERROR)
{
@@ -434,6 +436,8 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
if (!cupsDoAuthentication(http, "POST", resource))
httpReconnect(http);
+ else
+ status = HTTP_AUTHORIZATION_CANCELED;
}
#ifdef HAVE_SSL
@@ -681,11 +685,15 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
case HTTP_UNAUTHORIZED :
if (!cupsDoAuthentication(http, "POST", resource))
+ {
if (httpReconnect(http))
{
_cupsSetError(IPP_SERVICE_UNAVAILABLE, NULL, 0);
return (HTTP_SERVICE_UNAVAILABLE);
}
+ }
+ else
+ status = HTTP_AUTHORIZATION_CANCELED;
return (status);
@@ -782,7 +790,7 @@ cupsWriteRequestData(
* Finally, check if we have any pending data from the server...
*/
- if (length > HTTP_MAX_BUFFER ||
+ if (length >= HTTP_MAX_BUFFER ||
http->wused < wused ||
(wused > 0 && http->wused == length))
{
@@ -863,6 +871,7 @@ _cupsSetHTTPError(http_status_t status) /* I - HTTP status code */
break;
case HTTP_UNAUTHORIZED :
+ case HTTP_AUTHORIZATION_CANCELED :
_cupsSetError(IPP_NOT_AUTHORIZED, httpStatus(status), 0);
break;
diff --git a/cups/test.ppd b/cups/test.ppd
index 45473fdac..0dab6506a 100644
--- a/cups/test.ppd
+++ b/cups/test.ppd
@@ -39,6 +39,8 @@
*Throughput: "1"
*LandscapeOrientation: Plus90
*TTRasterizer: Type42
+*cupsFilter: "application/vnd.cups-raster - 0"
+*RequiresPageRegion All: True
*% These constraints are used to test ppdConflicts() and cupsResolveConflicts()
*UIConstraints: *PageSize Letter *InputSlot Envelope
diff --git a/cups/testppd.c b/cups/testppd.c
index 3a6bb8517..8b386e376 100644
--- a/cups/testppd.c
+++ b/cups/testppd.c
@@ -98,6 +98,30 @@ static const char *custom_code =
"%%EndFeature\n"
"} stopped cleartomark\n";
+static const char *default2_code =
+ "[{\n"
+ "%%BeginFeature: *InstalledDuplexer False\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *InputSlot Tray\n"
+ "InputSlot=Tray\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *Quality Normal\n"
+ "Quality=Normal\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *IntOption None\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n"
+ "[{\n"
+ "%%BeginFeature: *StringOption None\n"
+ "%%EndFeature\n"
+ "} stopped cleartomark\n";
+
/*
* 'main()' - Main entry.
@@ -596,6 +620,23 @@ main(int argc, /* I - Number of command-line arguments */
printf("FAIL (%d conflicts)\n", conflicts);
}
+ fputs("ppdEmitString (defaults): ", stdout);
+ if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
+ !strcmp(s, default2_code))
+ puts("PASS");
+ else
+ {
+ status ++;
+ printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
+ (int)strlen(default2_code));
+
+ if (s)
+ puts(s);
+ }
+
+ if (s)
+ free(s);
+
fputs("ppdConflicts(): ", stdout);
ppdMarkOption(ppd, "PageSize", "Env10");
ppdMarkOption(ppd, "InputSlot", "Envelope");
diff --git a/cups/transcode.c b/cups/transcode.c
index afeb2de4a..4e7a794cb 100644
--- a/cups/transcode.c
+++ b/cups/transcode.c
@@ -263,7 +263,7 @@ cupsCharsetToUTF8(
* Check for valid arguments...
*/
- DEBUG_printf(("cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)",
+ DEBUG_printf(("2cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)",
dest, src, maxout, encoding));
if (dest)
@@ -271,7 +271,7 @@ cupsCharsetToUTF8(
if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
{
- DEBUG_puts("1cupsCharsetToUTF8: Bad arguments, returning -1");
+ DEBUG_puts("3cupsCharsetToUTF8: Bad arguments, returning -1");
return (-1);
}
diff --git a/cups/usersys.c b/cups/usersys.c
index 1ec589da9..be69e2652 100644
--- a/cups/usersys.c
+++ b/cups/usersys.c
@@ -23,6 +23,7 @@
* server.
* cupsSetEncryption() - Set the encryption preference.
* cupsSetPasswordCB() - Set the password callback for CUPS.
+ * cupsSetPasswordCB2() - Set the advanced password callback for CUPS.
* cupsSetServer() - Set the default server name.
* cupsSetUser() - Set the default user name.
* cupsUser() - Return the current user's name.
@@ -87,7 +88,36 @@ cupsEncryption(void)
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
{
- return ((*_cupsGlobals()->password_cb)(prompt));
+ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
+
+
+ return ((cg->password_cb)(prompt, NULL, NULL, NULL, cg->password_data));
+}
+
+
+/*
+ * 'cupsGetPassword2()' - Get a password from the user using the advanced
+ * callback.
+ *
+ * Uses the current password callback function. Returns @code NULL@ if the
+ * user does not provide a password.
+ *
+ * @since CUPS 1.4@
+ */
+
+const char * /* O - Password */
+cupsGetPassword2(const char *prompt, /* I - Prompt string */
+ http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
+ const char *method, /* I - Request method ("GET", "POST", "PUT") */
+ const char *resource) /* I - Resource path */
+{
+ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
+
+
+ if (!http)
+ http = _cupsConnect();
+
+ return ((cg->password_cb)(prompt, http, method, resource, cg->password_data));
}
@@ -140,10 +170,37 @@ cupsSetPasswordCB(cups_password_cb_t cb)/* I - Callback function */
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
- if (cb == (const char *(*)(const char *))0)
- cg->password_cb = _cupsGetPassword;
+ if (cb == (cups_password_cb_t)0)
+ cg->password_cb = (cups_password_cb2_t)_cupsGetPassword;
+ else
+ cg->password_cb = (cups_password_cb2_t)cb;
+
+ cg->password_data = NULL;
+}
+
+
+/*
+ * 'cupsSetPasswordCB2()' - Set the advanced password callback for CUPS.
+ *
+ * Pass @code NULL@ to restore the default (console) password callback.
+ *
+ * @since CUPS 1.4@
+ */
+
+void
+cupsSetPasswordCB2(
+ cups_password_cb2_t cb, /* I - Callback function */
+ void *user_data) /* I - User data pointer */
+{
+ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
+
+
+ if (cb == (cups_password_cb2_t)0)
+ cg->password_cb = (cups_password_cb2_t)_cupsGetPassword;
else
cg->password_cb = cb;
+
+ cg->password_data = user_data;
}
diff --git a/doc/Makefile b/doc/Makefile
index 2be1141c9..f86f11070 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -3,7 +3,7 @@
#
# Documentation makefile for the Common UNIX Printing System (CUPS).
#
-# Copyright 2007-2008 by Apple Inc.
+# Copyright 2007-2009 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -22,33 +22,37 @@ include ../Makedefs
WEBPAGES = \
cups.css \
cups-printable.css \
- favicon.png \
index.html \
robots.txt
WEBIMAGES = \
images/color-wheel.png \
images/cups.png \
- images/cups-block-diagram.gif \
- images/cups-command-chain.png \
images/cups-icon.png \
- images/cups-postscript-chain.png \
- images/cups-raster-chain.png \
images/left.gif \
- images/raster.png \
images/right.gif \
images/sel.gif \
- images/smiley.jpg \
images/unsel.gif \
images/wait.gif
+HELPIMAGES = \
+ images/cups-block-diagram.gif \
+ images/cups-command-chain.png \
+ images/cups-postscript-chain.png \
+ images/cups-raster-chain.png \
+ images/raster.png \
+ images/smiley.jpg
HELPFILES = \
help/accounting.html \
help/api-array.html \
+ help/api-cgi.html \
help/api-cups.html \
+ help/api-driver.html \
help/api-filedir.html \
help/api-filter.html \
help/api-httpipp.html \
+ help/api-mime.html \
help/api-overview.html \
help/api-ppd.html \
+ help/api-ppdc.html \
help/api-raster.html \
help/cgi.html \
help/glossary.html \
@@ -111,6 +115,7 @@ HELPFILES = \
help/spec-command.html \
help/spec-design.html \
help/spec-ipp.html \
+ help/spec-pdf.html \
help/spec-postscript.html \
help/spec-ppd.html \
help/spec-raster.html \
@@ -176,7 +181,7 @@ install-data: $(INSTALL_LANGUAGES)
$(INSTALL_MAN) $$file $(DOCDIR)/help; \
done
$(INSTALL_DIR) -m 755 $(DOCDIR)/images
- for file in $(WEBIMAGES); do \
+ for file in $(WEBIMAGES) $(HELPIMAGES); do \
$(INSTALL_MAN) $$file $(DOCDIR)/images; \
done
@@ -238,5 +243,15 @@ uninstall-languages:
#
+# Install the docset bits locally...
+#
+
+docset:
+ cp $(HELPFILES) ../org.cups.docset/Contents/Resources/Documentation/help
+ cp cups-printable.css ../org.cups.docset/Contents/Resources/Documentation
+ cp $(HELPIMAGES) ../org.cups.docset/Contents/Resources/Documentation/images
+
+
+#
# End of Makefile.
#
diff --git a/doc/cups-printable.css b/doc/cups-printable.css
index e4ad1fbff..a65dd8355 100644
--- a/doc/cups-printable.css
+++ b/doc/cups-printable.css
@@ -19,6 +19,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/favicon.png b/doc/favicon.png
deleted file mode 100644
index d77f3c8f6..000000000
--- a/doc/favicon.png
+++ /dev/null
Binary files differ
diff --git a/doc/help/api-array.html b/doc/help/api-array.html
index d05a656f8..95b308006 100644
--- a/doc/help/api-array.html
+++ b/doc/help/api-array.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/help/api-cgi.html b/doc/help/api-cgi.html
new file mode 100644
index 000000000..756294840
--- /dev/null
+++ b/doc/help/api-cgi.html
@@ -0,0 +1,1021 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>CGI API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<style type="text/css"><!--
+BODY {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+H1, H2, H3, H4, H5, H6, P, TD, TH {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+KBD {
+ font-family: monaco, courier, monospace;
+ font-weight: bold;
+}
+
+PRE {
+ font-family: monaco, courier, monospace;
+}
+
+PRE.command {
+ margin-left: 36pt;
+}
+
+P.compact {
+ margin: 0;
+}
+
+P.example {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+PRE.example {
+ background: #eeeeee;
+ border: dotted thin #999999;
+ margin-left: 36pt;
+ padding: 10px;
+}
+
+PRE.command EM, PRE.example EM {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+P.command {
+ font-family: monaco, courier, monospace;
+ margin-left: 36pt;
+}
+
+P.formula {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+BLOCKQUOTE {
+ background: #cccccc;
+ border: solid thin #999999;
+ padding: 10pt;
+}
+
+A IMG {
+ border: none;
+}
+
+A:link:hover IMG {
+ background: #f0f0f0;
+ border-radius: 10px;
+ -moz-border-radius: 10px;
+}
+
+A:link, A:visited {
+ font-weight: normal;
+ text-decoration: none;
+}
+
+A:link:hover, A:visited:hover, A:active {
+ text-decoration: underline;
+}
+
+SUB, SUP {
+ font-size: 50%;
+}
+
+TR.data, TD.data, TR.data TD {
+ margin-top: 10pt;
+ padding: 5pt;
+ border-bottom: solid 1pt #999999;
+}
+
+TR.data TH {
+ border-bottom: solid 1pt #999999;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+}
+
+DIV.table TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table CAPTION {
+ caption-side: top;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table TABLE TD {
+ border: solid thin #cccccc;
+ padding-top: 5pt;
+}
+
+DIV.table TABLE TH {
+ background: #cccccc;
+ border: none;
+ border-bottom: solid thin #999999;
+}
+
+DIV.figure TABLE {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.figure CAPTION {
+ caption-side: bottom;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+TH.label {
+ text-align: right;
+ vertical-align: top;
+}
+
+TH.sublabel {
+ text-align: right;
+ font-weight: normal;
+}
+
+HR {
+ border: solid thin;
+}
+
+SPAN.info {
+ background: black;
+ border: thin solid black;
+ color: white;
+ font-size: 80%;
+ font-style: italic;
+ font-weight: bold;
+ white-space: nowrap;
+}
+
+H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
+ float: right;
+ font-size: 100%;
+}
+
+H2.title, H3.title {
+ border-bottom: solid 2pt #000000;
+}
+
+DIV.indent, TABLE.indent {
+ margin-top: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.indent {
+ border-collapse: collapse;
+}
+
+TABLE.indent TD, TABLE.indent TH {
+ padding: 0;
+}
+
+TABLE.list {
+ border-collapse: collapse;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.list TH {
+ background: white;
+ border-bottom: solid thin #cccccc;
+ color: #444444;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+ vertical-align: bottom;
+ white-space: nowrap;
+}
+
+TABLE.list TH A {
+ color: #4444cc;
+}
+
+TABLE.list TD {
+ border-bottom: solid thin #eeeeee;
+ padding-top: 5pt;
+ padding-left: 5pt;
+}
+
+TABLE.list TR:nth-child(even) {
+ background: #f8f8f8;
+}
+
+TABLE.list TR:nth-child(odd) {
+ background: #f4f4f4;
+}
+
+DT {
+ margin-left: 36pt;
+ margin-top: 12pt;
+}
+
+DD {
+ margin-left: 54pt;
+}
+
+DL.category DT {
+ font-weight: bold;
+}
+
+P.summary {
+ margin-left: 36pt;
+ font-family: monaco, courier, monospace;
+}
+
+DIV.summary TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin: 10px;
+}
+
+DIV.summary TABLE TD, DIV.summary TABLE TH {
+ border: solid thin #999999;
+ padding: 5px;
+ text-align: left;
+ vertical-align: top;
+}
+
+DIV.summary TABLE THEAD TH {
+ background: #eeeeee;
+}
+
+/* API documentation styles... */
+div.body h1 {
+ margin: 0;
+}
+div.body h2 {
+ margin-top: 1.5em;
+}
+div.body h3, div.body h4, div.body h5 {
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+.class, .enumeration, .function, .struct, .typedef, .union {
+ border-bottom: solid thin #999999;
+ margin-bottom: 0;
+ margin-top: 2em;
+}
+.description {
+ margin-top: 0.5em;
+}
+code, p.code, pre, ul.code li {
+ font-family: monaco, courier, monospace;
+ font-size: 90%;
+}
+ul.code, ul.contents, ul.subcontents {
+ list-style-type: none;
+ margin: 0;
+ padding-left: 0;
+}
+ul.code li {
+ margin: 0;
+}
+ul.contents > li {
+ margin-top: 1em;
+}
+ul.contents li ul.code, ul.contents li ul.subcontents {
+ padding-left: 2em;
+}
+div.body dl {
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dt {
+ font-style: italic;
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dd {
+ margin-bottom: 0.5em;
+}
+
+/* This is just for the HTML files generated with the framedhelp target */
+div.contents {
+ background: #e8e8e8;
+ border: solid thin black;
+ padding: 10px;
+}
+div.contents h1 {
+ font-size: 110%;
+}
+div.contents h2 {
+ font-size: 100%;
+}
+div.contents ul.contents {
+ font-size: 80%;
+}
+div.contents ul.subcontents li {
+ margin-left: 1em;
+ text-indent: -1em;
+}
+--></style>
+</head>
+<body>
+<div class='body'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+<li><a href="#cgiCheckVariables" title="Check for the presence of &quot;required&quot; variables.">cgiCheckVariables</a></li>
+<li><a href="#cgiCompileSearch" title="Compile a search string.">cgiCompileSearch</a></li>
+<li><a href="#cgiCopyTemplateFile" title="Copy a template file and replace all the
+'{variable}' strings with the variable value.">cgiCopyTemplateFile</a></li>
+<li><a href="#cgiCopyTemplateLang" title="Copy a template file using a language...">cgiCopyTemplateLang</a></li>
+<li><a href="#cgiDoSearch" title="Do a search of some text.">cgiDoSearch</a></li>
+<li><a href="#cgiEndHTML" title="End a HTML page.">cgiEndHTML</a></li>
+<li><a href="#cgiEndMultipart" title="End the delivery of a multipart web page.">cgiEndMultipart</a></li>
+<li><a href="#cgiFormEncode" title="Encode a string as a form variable.">cgiFormEncode</a></li>
+<li><a href="#cgiFreeSearch" title="Free a compiled search context.">cgiFreeSearch</a></li>
+<li><a href="#cgiGetArray" title="Get an element from a form array...">cgiGetArray</a></li>
+<li><a href="#cgiGetAttributes" title="Get the list of attributes that are needed
+by the template file.">cgiGetAttributes</a></li>
+<li><a href="#cgiGetFile" title="Get the file (if any) that was submitted in the form.">cgiGetFile</a></li>
+<li><a href="#cgiGetIPPObjects" title="Get the objects in an IPP response.">cgiGetIPPObjects</a></li>
+<li><a href="#cgiGetSize" title="Get the size of a form array value.">cgiGetSize</a></li>
+<li><a href="#cgiGetTemplateDir" title="Get the templates directory...">cgiGetTemplateDir</a></li>
+<li><a href="#cgiGetVariable" title="Get a CGI variable from the database...">cgiGetVariable</a></li>
+<li><a href="#cgiInitialize" title="Initialize the CGI variable &quot;database&quot;...">cgiInitialize</a></li>
+<li><a href="#cgiIsPOST" title="Determine whether this page was POSTed.">cgiIsPOST</a></li>
+<li><a href="#cgiMoveJobs" title="Move one or more jobs.">cgiMoveJobs</a></li>
+<li><a href="#cgiPrintCommand" title="Print a CUPS command job.">cgiPrintCommand</a></li>
+<li><a href="#cgiPrintTestPage" title="Print a test page.">cgiPrintTestPage</a></li>
+<li><a href="#cgiRewriteURL" title="Rewrite a printer URI into a web browser URL...">cgiRewriteURL</a></li>
+<li><a href="#cgiSetArray" title="Set array element N to the specified string.">cgiSetArray</a></li>
+<li><a href="#cgiSetIPPObjectVars" title="Set CGI variables from an IPP object.">cgiSetIPPObjectVars</a></li>
+<li><a href="#cgiSetIPPVars" title="Set CGI variables from an IPP response.">cgiSetIPPVars</a></li>
+<li><a href="#cgiSetServerVersion" title="Set the server name and CUPS version...">cgiSetServerVersion</a></li>
+<li><a href="#cgiSetSize" title="Set the array size.">cgiSetSize</a></li>
+<li><a href="#cgiSetVariable" title="Set a CGI variable in the database...">cgiSetVariable</a></li>
+<li><a href="#cgiShowIPPError" title="Show the last IPP error message.">cgiShowIPPError</a></li>
+<li><a href="#cgiShowJobs" title="Show print jobs.">cgiShowJobs</a></li>
+<li><a href="#cgiStartHTML" title="Start a HTML page.">cgiStartHTML</a></li>
+<li><a href="#cgiStartMultipart" title="Start a multipart delivery of a web page.">cgiStartMultipart</a></li>
+<li><a href="#cgiSupportsMultipart" title="Does the browser support multi-part documents?">cgiSupportsMultipart</a></li>
+<li><a href="#cgiText" title="Return localized text.">cgiText</a></li>
+<li><a href="#helpDeleteIndex" title="Delete an index, freeing all memory used.">helpDeleteIndex</a></li>
+<li><a href="#helpFindNode" title="Find a node in an index.">helpFindNode</a></li>
+<li><a href="#helpLoadIndex" title="Load a help index from disk.">helpLoadIndex</a></li>
+<li><a href="#helpSaveIndex" title="Save a help index to disk.">helpSaveIndex</a></li>
+<li><a href="#helpSearchIndex" title="Search an index.">helpSearchIndex</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+ <li><a href="#cgi_file_t" title="Uploaded file data">cgi_file_t</a></li>
+ <li><a href="#help_index_t" title="Help index structure">help_index_t</a></li>
+ <li><a href="#help_node_t" title="Help node structure...">help_node_t</a></li>
+ <li><a href="#help_word_t" title="Help word structure...">help_word_t</a></li>
+</ul></li>
+<li><a href="#STRUCTURES">Structures</a><ul class="code">
+ <li><a href="#cgi_file_s" title="Uploaded file data">cgi_file_s</a></li>
+ <li><a href="#help_index_s" title="Help index structure">help_index_s</a></li>
+ <li><a href="#help_node_s" title="Help node structure...">help_node_s</a></li>
+ <li><a href="#help_word_s" title="Help word structure...">help_word_s</a></li>
+</ul></li>
+<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a name="cgiCheckVariables">cgiCheckVariables</a></h3>
+<p class="description">Check for the presence of &quot;required&quot; variables.</p>
+<p class="code">
+int cgiCheckVariables (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *names<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>names</dt>
+<dd class="description">Variables to look for</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if all variables present, 0 otherwise</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Names may be separated by spaces and/or commas.</p>
+<h3 class="function"><a name="cgiCompileSearch">cgiCompileSearch</a></h3>
+<p class="description">Compile a search string.</p>
+<p class="code">
+void *cgiCompileSearch (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *query<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>query</dt>
+<dd class="description">Query string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Search context</p>
+<h3 class="function"><a name="cgiCopyTemplateFile">cgiCopyTemplateFile</a></h3>
+<p class="description">Copy a template file and replace all the
+'{variable}' strings with the variable value.</p>
+<p class="code">
+void cgiCopyTemplateFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;FILE *out,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tmpl<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>out</dt>
+<dd class="description">Output file</dd>
+<dt>tmpl</dt>
+<dd class="description">Template file to read</dd>
+</dl>
+<h3 class="function"><a name="cgiCopyTemplateLang">cgiCopyTemplateLang</a></h3>
+<p class="description">Copy a template file using a language...</p>
+<p class="code">
+void cgiCopyTemplateLang (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tmpl<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>tmpl</dt>
+<dd class="description">Base filename</dd>
+</dl>
+<h3 class="function"><a name="cgiDoSearch">cgiDoSearch</a></h3>
+<p class="description">Do a search of some text.</p>
+<p class="code">
+int cgiDoSearch (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *search,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *text<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>search</dt>
+<dd class="description">Search context</dd>
+<dt>text</dt>
+<dd class="description">Text to search</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of matches</p>
+<h3 class="function"><a name="cgiEndHTML">cgiEndHTML</a></h3>
+<p class="description">End a HTML page.</p>
+<p class="code">
+void cgiEndHTML (void);</p>
+<h3 class="function"><a name="cgiEndMultipart">cgiEndMultipart</a></h3>
+<p class="description">End the delivery of a multipart web page.</p>
+<p class="code">
+void cgiEndMultipart (void);</p>
+<h3 class="function"><a name="cgiFormEncode">cgiFormEncode</a></h3>
+<p class="description">Encode a string as a form variable.</p>
+<p class="code">
+char *cgiFormEncode (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t dstsize<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>dst</dt>
+<dd class="description">Destination string</dd>
+<dt>src</dt>
+<dd class="description">Source string</dd>
+<dt>dstsize</dt>
+<dd class="description">Size of destination string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Destination string</p>
+<h3 class="function"><a name="cgiFreeSearch">cgiFreeSearch</a></h3>
+<p class="description">Free a compiled search context.</p>
+<p class="code">
+void cgiFreeSearch (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *search<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>search</dt>
+<dd class="description">Search context</dd>
+</dl>
+<h3 class="function"><a name="cgiGetArray">cgiGetArray</a></h3>
+<p class="description">Get an element from a form array...</p>
+<p class="code">
+const char *cgiGetArray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of array variable</dd>
+<dt>element</dt>
+<dd class="description">Element number (0 to N)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Element value or NULL</p>
+<h3 class="function"><a name="cgiGetAttributes">cgiGetAttributes</a></h3>
+<p class="description">Get the list of attributes that are needed
+by the template file.</p>
+<p class="code">
+void cgiGetAttributes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *request,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tmpl<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>request</dt>
+<dd class="description">IPP request</dd>
+<dt>tmpl</dt>
+<dd class="description">Base filename</dd>
+</dl>
+<h3 class="function"><a name="cgiGetFile">cgiGetFile</a></h3>
+<p class="description">Get the file (if any) that was submitted in the form.</p>
+<p class="code">
+const <a href="#cgi_file_t">cgi_file_t</a> *cgiGetFile (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Attached file or NULL</p>
+<h3 class="function"><a name="cgiGetIPPObjects">cgiGetIPPObjects</a></h3>
+<p class="description">Get the objects in an IPP response.</p>
+<p class="code">
+cups_array_t *cgiGetIPPObjects (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *response,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *search<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>response</dt>
+<dd class="description">IPP response</dd>
+<dt>search</dt>
+<dd class="description">Search filter</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Array of objects</p>
+<h3 class="function"><a name="cgiGetSize">cgiGetSize</a></h3>
+<p class="description">Get the size of a form array value.</p>
+<p class="code">
+int cgiGetSize (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of elements</p>
+<h3 class="function"><a name="cgiGetTemplateDir">cgiGetTemplateDir</a></h3>
+<p class="description">Get the templates directory...</p>
+<p class="code">
+char *cgiGetTemplateDir (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Template directory</p>
+<h3 class="function"><a name="cgiGetVariable">cgiGetVariable</a></h3>
+<p class="description">Get a CGI variable from the database...</p>
+<p class="code">
+const char *cgiGetVariable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Value of variable</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns NULL if the variable doesn't exist. If the variable is an
+array of values, returns the last element...</p>
+<h3 class="function"><a name="cgiInitialize">cgiInitialize</a></h3>
+<p class="description">Initialize the CGI variable &quot;database&quot;...</p>
+<p class="code">
+int cgiInitialize (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Non-zero if there was form data</p>
+<h3 class="function"><a name="cgiIsPOST">cgiIsPOST</a></h3>
+<p class="description">Determine whether this page was POSTed.</p>
+<p class="code">
+int cgiIsPOST (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if POST, 0 if GET</p>
+<h3 class="function"><a name="cgiMoveJobs">cgiMoveJobs</a></h3>
+<p class="description">Move one or more jobs.</p>
+<p class="code">
+void cgiMoveJobs (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int job_id<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination or NULL</dd>
+<dt>job_id</dt>
+<dd class="description">Job ID or 0 for all</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">At least one of dest or job_id must be non-zero/NULL.</p>
+<h3 class="function"><a name="cgiPrintCommand">cgiPrintCommand</a></h3>
+<p class="description">Print a CUPS command job.</p>
+<p class="code">
+void cgiPrintCommand (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *command,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *title<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination printer</dd>
+<dt>command</dt>
+<dd class="description">Command to send</dd>
+<dt>title</dt>
+<dd class="description">Page/job title</dd>
+</dl>
+<h3 class="function"><a name="cgiPrintTestPage">cgiPrintTestPage</a></h3>
+<p class="description">Print a test page.</p>
+<p class="code">
+void cgiPrintTestPage (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination printer/class</dd>
+</dl>
+<h3 class="function"><a name="cgiRewriteURL">cgiRewriteURL</a></h3>
+<p class="description">Rewrite a printer URI into a web browser URL...</p>
+<p class="code">
+char *cgiRewriteURL (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *url,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int urlsize,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *newresource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>uri</dt>
+<dd class="description">Current URI</dd>
+<dt>url</dt>
+<dd class="description">New URL</dd>
+<dt>urlsize</dt>
+<dd class="description">Size of URL buffer</dd>
+<dt>newresource</dt>
+<dd class="description">Replacement resource</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New URL</p>
+<h3 class="function"><a name="cgiSetArray">cgiSetArray</a></h3>
+<p class="description">Set array element N to the specified string.</p>
+<p class="code">
+void cgiSetArray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+<dt>element</dt>
+<dd class="description">Element number (0 to N)</dd>
+<dt>value</dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">If the variable array is smaller than (element + 1), the intervening
+elements are set to NULL.</p>
+<h3 class="function"><a name="cgiSetIPPObjectVars">cgiSetIPPObjectVars</a></h3>
+<p class="description">Set CGI variables from an IPP object.</p>
+<p class="code">
+ipp_attribute_t *cgiSetIPPObjectVars (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_attribute_t *obj,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *prefix,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>obj</dt>
+<dd class="description">Response data to be copied...</dd>
+<dt>prefix</dt>
+<dd class="description">Prefix for name or NULL</dd>
+<dt>element</dt>
+<dd class="description">Parent element number</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Next object</p>
+<h3 class="function"><a name="cgiSetIPPVars">cgiSetIPPVars</a></h3>
+<p class="description">Set CGI variables from an IPP response.</p>
+<p class="code">
+int cgiSetIPPVars (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *response,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filter_name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filter_value,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *prefix,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int parent_el<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>response</dt>
+<dd class="description">Response data to be copied...</dd>
+<dt>filter_name</dt>
+<dd class="description">Filter name</dd>
+<dt>filter_value</dt>
+<dd class="description">Filter value</dd>
+<dt>prefix</dt>
+<dd class="description">Prefix for name or NULL</dd>
+<dt>parent_el</dt>
+<dd class="description">Parent element number</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Maximum number of elements</p>
+<h3 class="function"><a name="cgiSetServerVersion">cgiSetServerVersion</a></h3>
+<p class="description">Set the server name and CUPS version...</p>
+<p class="code">
+void cgiSetServerVersion (void);</p>
+<h3 class="function"><a name="cgiSetSize">cgiSetSize</a></h3>
+<p class="description">Set the array size.</p>
+<p class="code">
+void cgiSetSize (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int size<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+<dt>size</dt>
+<dd class="description">Number of elements (0 to N)</dd>
+</dl>
+<h3 class="function"><a name="cgiSetVariable">cgiSetVariable</a></h3>
+<p class="description">Set a CGI variable in the database...</p>
+<p class="code">
+void cgiSetVariable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+<dt>value</dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">If the variable is an array, this truncates the array to a single element.</p>
+<h3 class="function"><a name="cgiShowIPPError">cgiShowIPPError</a></h3>
+<p class="description">Show the last IPP error message.</p>
+<p class="code">
+void cgiShowIPPError (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *message<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>message</dt>
+<dd class="description">Contextual message</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The caller must still call cgiStartHTML() and cgiEndHTML().</p>
+<h3 class="function"><a name="cgiShowJobs">cgiShowJobs</a></h3>
+<p class="description">Show print jobs.</p>
+<p class="code">
+void cgiShowJobs (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination name or NULL</dd>
+</dl>
+<h3 class="function"><a name="cgiStartHTML">cgiStartHTML</a></h3>
+<p class="description">Start a HTML page.</p>
+<p class="code">
+void cgiStartHTML (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *title<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>title</dt>
+<dd class="description">Title of page</dd>
+</dl>
+<h3 class="function"><a name="cgiStartMultipart">cgiStartMultipart</a></h3>
+<p class="description">Start a multipart delivery of a web page.</p>
+<p class="code">
+void cgiStartMultipart (void);</p>
+<h3 class="function"><a name="cgiSupportsMultipart">cgiSupportsMultipart</a></h3>
+<p class="description">Does the browser support multi-part documents?</p>
+<p class="code">
+int cgiSupportsMultipart (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if multi-part supported, 0 otherwise</p>
+<h3 class="function"><a name="cgiText">cgiText</a></h3>
+<p class="description">Return localized text.</p>
+<p class="code">
+const char *cgiText (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *message<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>message</dt>
+<dd class="description">Message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Localized message</p>
+<h3 class="function"><a name="helpDeleteIndex">helpDeleteIndex</a></h3>
+<p class="description">Delete an index, freeing all memory used.</p>
+<p class="code">
+void helpDeleteIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Help index</dd>
+</dl>
+<h3 class="function"><a name="helpFindNode">helpFindNode</a></h3>
+<p class="description">Find a node in an index.</p>
+<p class="code">
+<a href="#help_node_t">help_node_t</a> *helpFindNode (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *anchor<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Index</dd>
+<dt>filename</dt>
+<dd class="description">Filename</dd>
+<dt>anchor</dt>
+<dd class="description">Anchor</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Node pointer or NULL</p>
+<h3 class="function"><a name="helpLoadIndex">helpLoadIndex</a></h3>
+<p class="description">Load a help index from disk.</p>
+<p class="code">
+<a href="#help_index_t">help_index_t</a> *helpLoadIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *hifile,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *directory<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hifile</dt>
+<dd class="description">Index filename</dd>
+<dt>directory</dt>
+<dd class="description">Directory that is indexed</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Index pointer or NULL</p>
+<h3 class="function"><a name="helpSaveIndex">helpSaveIndex</a></h3>
+<p class="description">Save a help index to disk.</p>
+<p class="code">
+int helpSaveIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *hifile<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Index</dd>
+<dt>hifile</dt>
+<dd class="description">Index filename</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, -1 on error</p>
+<h3 class="function"><a name="helpSearchIndex">helpSearchIndex</a></h3>
+<p class="description">Search an index.</p>
+<p class="code">
+<a href="#help_index_t">help_index_t</a> *helpSearchIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *query,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *section,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Index</dd>
+<dt>query</dt>
+<dd class="description">Query string</dd>
+<dt>section</dt>
+<dd class="description">Limit search to this section</dd>
+<dt>filename</dt>
+<dd class="description">Limit search to this file</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Search index</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="cgi_file_t">cgi_file_t</a></h3>
+<p class="description">Uploaded file data</p>
+<p class="code">
+typedef struct <a href="#cgi_file_s">cgi_file_s</a> cgi_file_t;
+</p>
+<h3 class="typedef"><a name="help_index_t">help_index_t</a></h3>
+<p class="description">Help index structure</p>
+<p class="code">
+typedef struct <a href="#help_index_s">help_index_s</a> help_index_t;
+</p>
+<h3 class="typedef"><a name="help_node_t">help_node_t</a></h3>
+<p class="description">Help node structure...</p>
+<p class="code">
+typedef struct <a href="#help_node_s">help_node_s</a> help_node_t;
+</p>
+<h3 class="typedef"><a name="help_word_t">help_word_t</a></h3>
+<p class="description">Help word structure...</p>
+<p class="code">
+typedef struct <a href="#help_word_s">help_word_s</a> help_word_t;
+</p>
+<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><a name="cgi_file_s">cgi_file_s</a></h3>
+<p class="description">Uploaded file data</p>
+<p class="code">struct cgi_file_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t filesize;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char tempfile[1024], *name, *filename, *mimetype;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>filesize </dt>
+<dd class="description">Size of uploaded file</dd>
+<dt>mimetype </dt>
+<dd class="description">MIME media type</dd>
+</dl>
+<h3 class="struct"><a name="help_index_s">help_index_s</a></h3>
+<p class="description">Help index structure</p>
+<p class="code">struct help_index_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *nodes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int search;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *sorted;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>nodes </dt>
+<dd class="description">Nodes sorted by filename</dd>
+<dt>search </dt>
+<dd class="description">1 = search index, 0 = normal</dd>
+<dt>sorted </dt>
+<dd class="description">Nodes sorted by score + text</dd>
+</dl>
+<h3 class="struct"><a name="help_node_s">help_node_s</a></h3>
+<p class="description">Help node structure...</p>
+<p class="code">struct help_node_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *anchor;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;time_t mtime;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;off_t offset;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int score;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *section;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *text;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *words;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>anchor </dt>
+<dd class="description">Anchor name (NULL if none)</dd>
+<dt>filename </dt>
+<dd class="description">Filename, relative to help dir</dd>
+<dt>length </dt>
+<dd class="description">Length in bytes</dd>
+<dt>mtime </dt>
+<dd class="description">Last modification time</dd>
+<dt>offset </dt>
+<dd class="description">Offset in file</dd>
+<dt>score </dt>
+<dd class="description">Search score</dd>
+<dt>section </dt>
+<dd class="description">Section name (NULL if none)</dd>
+<dt>text </dt>
+<dd class="description">Text in anchor</dd>
+<dt>words </dt>
+<dd class="description">Words after this node</dd>
+</dl>
+<h3 class="struct"><a name="help_word_s">help_word_s</a></h3>
+<p class="description">Help word structure...</p>
+<p class="code">struct help_word_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int count;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *text;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>count </dt>
+<dd class="description">Number of occurrences</dd>
+<dt>text </dt>
+<dd class="description">Word text</dd>
+</dl>
+</div>
+</body>
+</html>
diff --git a/doc/help/api-cups.html b/doc/help/api-cups.html
index 3d4bfb10c..dcfa36fa1 100644
--- a/doc/help/api-cups.html
+++ b/doc/help/api-cups.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
@@ -409,6 +413,8 @@ div.contents ul.subcontents li {
<li><a href="#cupsGetPPD3" title="Get the PPD file for a printer on the specified
server if it has changed.">cupsGetPPD3</a></li>
<li><a href="#cupsGetPassword" title="Get a password from the user.">cupsGetPassword</a></li>
+<li><a href="#cupsGetPassword2" title="Get a password from the user using the advanced
+callback.">cupsGetPassword2</a></li>
<li><a href="#cupsGetPrinters" title="Get a list of printers from the default server.">cupsGetPrinters</a></li>
<li><a href="#cupsGetServerPPD" title="Get an available PPD file from the server.">cupsGetServerPPD</a></li>
<li><a href="#cupsLangDefault" title="Return the default language.">cupsLangDefault</a></li>
@@ -437,6 +443,7 @@ specified server.">cupsPrintFiles2</a></li>
<li><a href="#cupsSetDests2" title="Save the list of destinations for the specified server.">cupsSetDests2</a></li>
<li><a href="#cupsSetEncryption" title="Set the encryption preference.">cupsSetEncryption</a></li>
<li><a href="#cupsSetPasswordCB" title="Set the password callback for CUPS.">cupsSetPasswordCB</a></li>
+<li><a href="#cupsSetPasswordCB2" title="Set the advanced password callback for CUPS.">cupsSetPasswordCB2</a></li>
<li><a href="#cupsSetServer" title="Set the default server name.">cupsSetServer</a></li>
<li><a href="#cupsSetUser" title="Set the default user name.">cupsSetUser</a></li>
<li><a href="#cupsStartDocument" title="Add a document to a job created with cupsCreateJob().">cupsStartDocument</a></li>
@@ -450,6 +457,7 @@ specified server.">cupsPrintFiles2</a></li>
<li><a href="#cups_device_cb_t" title="Device callback ">cups_device_cb_t</a></li>
<li><a href="#cups_job_t" title="Job">cups_job_t</a></li>
<li><a href="#cups_option_t" title="Printer Options">cups_option_t</a></li>
+ <li><a href="#cups_password_cb2_t" title="New password callback ">cups_password_cb2_t</a></li>
<li><a href="#cups_password_cb_t" title="Password callback">cups_password_cb_t</a></li>
<li><a href="#cups_ptype_t" title="Printer type/capability bits">cups_ptype_t</a></li>
</ul></li>
@@ -1562,6 +1570,34 @@ const char *cupsGetPassword (<br>
<h4 class="discussion">Discussion</h4>
<p class="discussion">Uses the current password callback function. Returns <code>NULL</code> if the
user does not provide a password.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsGetPassword2">cupsGetPassword2</a></h3>
+<p class="description">Get a password from the user using the advanced
+callback.</p>
+<p class="code">
+const char *cupsGetPassword2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *prompt,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>prompt</dt>
+<dd class="description">Prompt string</dd>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>method</dt>
+<dd class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</dd>
+<dt>resource</dt>
+<dd class="description">Resource path</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Password</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Uses the current password callback function. Returns <code>NULL</code> if the
+user does not provide a password.
+
+</p>
<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsGetPrinters">cupsGetPrinters</a></h3>
<p class="description">Get a list of printers from the default server.</p>
<p class="code">
@@ -1990,6 +2026,24 @@ void cupsSetPasswordCB (<br>
</dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">Pass <code>NULL</code> to restore the default (console) password callback.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsSetPasswordCB2">cupsSetPasswordCB2</a></h3>
+<p class="description">Set the advanced password callback for CUPS.</p>
+<p class="code">
+void cupsSetPasswordCB2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_password_cb2_t">cups_password_cb2_t</a> cb,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cb</dt>
+<dd class="description">Callback function</dd>
+<dt>user_data</dt>
+<dd class="description">User data pointer</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Pass <code>NULL</code> to restore the default (console) password callback.
+
+</p>
<h3 class="function"><a name="cupsSetServer">cupsSetServer</a></h3>
<p class="description">Set the default server name.</p>
<p class="code">
@@ -2145,6 +2199,11 @@ typedef struct <a href="#cups_job_s">cups_job_s</a> cups_job_t;
<p class="code">
typedef struct <a href="#cups_option_s">cups_option_s</a> cups_option_t;
</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cups_password_cb2_t">cups_password_cb2_t</a></h3>
+<p class="description">New password callback </p>
+<p class="code">
+typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data);
+</p>
<h3 class="typedef"><a name="cups_password_cb_t">cups_password_cb_t</a></h3>
<p class="description">Password callback</p>
<p class="code">
@@ -2269,6 +2328,8 @@ typedef unsigned cups_ptype_t;
<dd class="description">Local printer or class</dd>
<dt>CUPS_PRINTER_MEDIUM </dt>
<dd class="description">Can do Tabloid/B/C/A3/A2</dd>
+<dt>CUPS_PRINTER_MFP <span class="info">&nbsp;CUPS 1.4&nbsp;</span></dt>
+<dd class="description">Printer with scanning capabilities </dd>
<dt>CUPS_PRINTER_NOT_SHARED <span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span></dt>
<dd class="description">Printer is not shared </dd>
<dt>CUPS_PRINTER_PUNCH </dt>
@@ -2277,6 +2338,8 @@ typedef unsigned cups_ptype_t;
<dd class="description">Printer is rejecting jobs</dd>
<dt>CUPS_PRINTER_REMOTE </dt>
<dd class="description">Remote printer or class</dd>
+<dt>CUPS_PRINTER_SCANNER <span class="info">&nbsp;CUPS 1.4&nbsp;</span></dt>
+<dd class="description">Scanner-only device </dd>
<dt>CUPS_PRINTER_SMALL </dt>
<dd class="description">Can do Letter/Legal/A4</dd>
<dt>CUPS_PRINTER_SORT </dt>
diff --git a/doc/help/api-driver.html b/doc/help/api-driver.html
new file mode 100644
index 000000000..7278a8038
--- /dev/null
+++ b/doc/help/api-driver.html
@@ -0,0 +1,1096 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>Printer Driver API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<style type="text/css"><!--
+BODY {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+H1, H2, H3, H4, H5, H6, P, TD, TH {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+KBD {
+ font-family: monaco, courier, monospace;
+ font-weight: bold;
+}
+
+PRE {
+ font-family: monaco, courier, monospace;
+}
+
+PRE.command {
+ margin-left: 36pt;
+}
+
+P.compact {
+ margin: 0;
+}
+
+P.example {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+PRE.example {
+ background: #eeeeee;
+ border: dotted thin #999999;
+ margin-left: 36pt;
+ padding: 10px;
+}
+
+PRE.command EM, PRE.example EM {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+P.command {
+ font-family: monaco, courier, monospace;
+ margin-left: 36pt;
+}
+
+P.formula {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+BLOCKQUOTE {
+ background: #cccccc;
+ border: solid thin #999999;
+ padding: 10pt;
+}
+
+A IMG {
+ border: none;
+}
+
+A:link:hover IMG {
+ background: #f0f0f0;
+ border-radius: 10px;
+ -moz-border-radius: 10px;
+}
+
+A:link, A:visited {
+ font-weight: normal;
+ text-decoration: none;
+}
+
+A:link:hover, A:visited:hover, A:active {
+ text-decoration: underline;
+}
+
+SUB, SUP {
+ font-size: 50%;
+}
+
+TR.data, TD.data, TR.data TD {
+ margin-top: 10pt;
+ padding: 5pt;
+ border-bottom: solid 1pt #999999;
+}
+
+TR.data TH {
+ border-bottom: solid 1pt #999999;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+}
+
+DIV.table TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table CAPTION {
+ caption-side: top;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table TABLE TD {
+ border: solid thin #cccccc;
+ padding-top: 5pt;
+}
+
+DIV.table TABLE TH {
+ background: #cccccc;
+ border: none;
+ border-bottom: solid thin #999999;
+}
+
+DIV.figure TABLE {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.figure CAPTION {
+ caption-side: bottom;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+TH.label {
+ text-align: right;
+ vertical-align: top;
+}
+
+TH.sublabel {
+ text-align: right;
+ font-weight: normal;
+}
+
+HR {
+ border: solid thin;
+}
+
+SPAN.info {
+ background: black;
+ border: thin solid black;
+ color: white;
+ font-size: 80%;
+ font-style: italic;
+ font-weight: bold;
+ white-space: nowrap;
+}
+
+H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
+ float: right;
+ font-size: 100%;
+}
+
+H2.title, H3.title {
+ border-bottom: solid 2pt #000000;
+}
+
+DIV.indent, TABLE.indent {
+ margin-top: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.indent {
+ border-collapse: collapse;
+}
+
+TABLE.indent TD, TABLE.indent TH {
+ padding: 0;
+}
+
+TABLE.list {
+ border-collapse: collapse;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.list TH {
+ background: white;
+ border-bottom: solid thin #cccccc;
+ color: #444444;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+ vertical-align: bottom;
+ white-space: nowrap;
+}
+
+TABLE.list TH A {
+ color: #4444cc;
+}
+
+TABLE.list TD {
+ border-bottom: solid thin #eeeeee;
+ padding-top: 5pt;
+ padding-left: 5pt;
+}
+
+TABLE.list TR:nth-child(even) {
+ background: #f8f8f8;
+}
+
+TABLE.list TR:nth-child(odd) {
+ background: #f4f4f4;
+}
+
+DT {
+ margin-left: 36pt;
+ margin-top: 12pt;
+}
+
+DD {
+ margin-left: 54pt;
+}
+
+DL.category DT {
+ font-weight: bold;
+}
+
+P.summary {
+ margin-left: 36pt;
+ font-family: monaco, courier, monospace;
+}
+
+DIV.summary TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin: 10px;
+}
+
+DIV.summary TABLE TD, DIV.summary TABLE TH {
+ border: solid thin #999999;
+ padding: 5px;
+ text-align: left;
+ vertical-align: top;
+}
+
+DIV.summary TABLE THEAD TH {
+ background: #eeeeee;
+}
+
+/* API documentation styles... */
+div.body h1 {
+ margin: 0;
+}
+div.body h2 {
+ margin-top: 1.5em;
+}
+div.body h3, div.body h4, div.body h5 {
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+.class, .enumeration, .function, .struct, .typedef, .union {
+ border-bottom: solid thin #999999;
+ margin-bottom: 0;
+ margin-top: 2em;
+}
+.description {
+ margin-top: 0.5em;
+}
+code, p.code, pre, ul.code li {
+ font-family: monaco, courier, monospace;
+ font-size: 90%;
+}
+ul.code, ul.contents, ul.subcontents {
+ list-style-type: none;
+ margin: 0;
+ padding-left: 0;
+}
+ul.code li {
+ margin: 0;
+}
+ul.contents > li {
+ margin-top: 1em;
+}
+ul.contents li ul.code, ul.contents li ul.subcontents {
+ padding-left: 2em;
+}
+div.body dl {
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dt {
+ font-style: italic;
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dd {
+ margin-bottom: 0.5em;
+}
+
+/* This is just for the HTML files generated with the framedhelp target */
+div.contents {
+ background: #e8e8e8;
+ border: solid thin black;
+ padding: 10px;
+}
+div.contents h1 {
+ font-size: 110%;
+}
+div.contents h2 {
+ font-size: 100%;
+}
+div.contents ul.contents {
+ font-size: 80%;
+}
+div.contents ul.subcontents li {
+ margin-left: 1em;
+ text-indent: -1em;
+}
+--></style>
+</head>
+<body>
+<div class='body'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+<li><a href="#cupsCMYKDelete" title="Delete a color separation.">cupsCMYKDelete</a></li>
+<li><a href="#cupsCMYKDoBlack" title="Do a black separation...">cupsCMYKDoBlack</a></li>
+<li><a href="#cupsCMYKDoCMYK" title="Do a CMYK separation...">cupsCMYKDoCMYK</a></li>
+<li><a href="#cupsCMYKDoGray" title="Do a grayscale separation...">cupsCMYKDoGray</a></li>
+<li><a href="#cupsCMYKDoRGB" title="Do an sRGB separation...">cupsCMYKDoRGB</a></li>
+<li><a href="#cupsCMYKLoad" title="Load a CMYK color profile from PPD attributes.">cupsCMYKLoad</a></li>
+<li><a href="#cupsCMYKNew" title="Create a new CMYK color separation.">cupsCMYKNew</a></li>
+<li><a href="#cupsCMYKSetBlack" title="Set the transition range for CMY to black.">cupsCMYKSetBlack</a></li>
+<li><a href="#cupsCMYKSetCurve" title="Set a color transform curve using points.">cupsCMYKSetCurve</a></li>
+<li><a href="#cupsCMYKSetGamma" title="Set a color transform curve using gamma and density.">cupsCMYKSetGamma</a></li>
+<li><a href="#cupsCMYKSetInkLimit" title="Set the limit on the amount of ink.">cupsCMYKSetInkLimit</a></li>
+<li><a href="#cupsCMYKSetLtDk" title="Set light/dark ink transforms.">cupsCMYKSetLtDk</a></li>
+<li><a href="#cupsCheckBytes" title="Check to see if all bytes are zero.">cupsCheckBytes</a></li>
+<li><a href="#cupsCheckValue" title="Check to see if all bytes match the given value.">cupsCheckValue</a></li>
+<li><a href="#cupsDitherDelete" title="Free a dithering buffer.">cupsDitherDelete</a></li>
+<li><a href="#cupsDitherLine" title="Dither a line of pixels...">cupsDitherLine</a></li>
+<li><a href="#cupsDitherNew" title="Create an error-diffusion dithering buffer.">cupsDitherNew</a></li>
+<li><a href="#cupsFindAttr" title="Find a PPD attribute based on the colormodel,
+media, and resolution.">cupsFindAttr</a></li>
+<li><a href="#cupsLutDelete" title="Free the memory used by a lookup table.">cupsLutDelete</a></li>
+<li><a href="#cupsLutLoad" title="Load a LUT from a PPD file.">cupsLutLoad</a></li>
+<li><a href="#cupsLutNew" title="Make a lookup table from a list of pixel values.">cupsLutNew</a></li>
+<li><a href="#cupsPackHorizontal" title="Pack pixels horizontally...">cupsPackHorizontal</a></li>
+<li><a href="#cupsPackHorizontal2" title="Pack 2-bit pixels horizontally...">cupsPackHorizontal2</a></li>
+<li><a href="#cupsPackHorizontalBit" title="Pack pixels horizontally by bit...">cupsPackHorizontalBit</a></li>
+<li><a href="#cupsPackVertical" title="Pack pixels vertically...">cupsPackVertical</a></li>
+<li><a href="#cupsRGBDelete" title="Delete a color separation.">cupsRGBDelete</a></li>
+<li><a href="#cupsRGBDoGray" title="Do a grayscale separation...">cupsRGBDoGray</a></li>
+<li><a href="#cupsRGBDoRGB" title="Do a RGB separation...">cupsRGBDoRGB</a></li>
+<li><a href="#cupsRGBLoad" title="Load a RGB color profile from a PPD file.">cupsRGBLoad</a></li>
+<li><a href="#cupsRGBNew" title="Create a new RGB color separation.">cupsRGBNew</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+ <li><a href="#cups_cmyk_t" title="Simple CMYK lookup table">cups_cmyk_t</a></li>
+ <li><a href="#cups_dither_t" title="Dithering State">cups_dither_t</a></li>
+ <li><a href="#cups_lut_t" title="Lookup Table for Dithering">cups_lut_t</a></li>
+ <li><a href="#cups_rgb_t" title="Color separation lookup table">cups_rgb_t</a></li>
+ <li><a href="#cups_sample_t" title="Color sample point">cups_sample_t</a></li>
+</ul></li>
+<li><a href="#STRUCTURES">Structures</a><ul class="code">
+ <li><a href="#cups_cmyk_s" title="Simple CMYK lookup table">cups_cmyk_s</a></li>
+ <li><a href="#cups_dither_s" title="Dithering State">cups_dither_s</a></li>
+ <li><a href="#cups_lut_s" title="Lookup Table for Dithering">cups_lut_s</a></li>
+ <li><a href="#cups_rgb_s" title="Color separation lookup table">cups_rgb_s</a></li>
+ <li><a href="#cups_sample_s" title="Color sample point">cups_sample_s</a></li>
+</ul></li>
+<li><a href="#VARIABLES">Variables</a><ul class="code">
+ <li><a href="#cups_scmy_lut[256]" title="sRGB gamma lookup table (inverted)">cups_scmy_lut[256]</a></li>
+ <li><a href="#cups_srgb_lut[256]" title="sRGB gamma lookup table">cups_srgb_lut[256]</a></li>
+</ul></li>
+<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a name="cupsCMYKDelete">cupsCMYKDelete</a></h3>
+<p class="description">Delete a color separation.</p>
+<p class="code">
+void cupsCMYKDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoBlack">cupsCMYKDoBlack</a></h3>
+<p class="description">Do a black separation...</p>
+<p class="code">
+void cupsCMYKDoBlack (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoCMYK">cupsCMYKDoCMYK</a></h3>
+<p class="description">Do a CMYK separation...</p>
+<p class="code">
+void cupsCMYKDoCMYK (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoGray">cupsCMYKDoGray</a></h3>
+<p class="description">Do a grayscale separation...</p>
+<p class="code">
+void cupsCMYKDoGray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoRGB">cupsCMYKDoRGB</a></h3>
+<p class="description">Do an sRGB separation...</p>
+<p class="code">
+void cupsCMYKDoRGB (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKLoad">cupsCMYKLoad</a></h3>
+<p class="description">Load a CMYK color profile from PPD attributes.</p>
+<p class="code">
+<a href="#cups_cmyk_t">cups_cmyk_t</a> *cupsCMYKLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>colormodel</dt>
+<dd class="description">ColorModel value</dd>
+<dt>media</dt>
+<dd class="description">MediaType value</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">CMYK color separation</p>
+<h3 class="function"><a name="cupsCMYKNew">cupsCMYKNew</a></h3>
+<p class="description">Create a new CMYK color separation.</p>
+<p class="code">
+<a href="#cups_cmyk_t">cups_cmyk_t</a> *cupsCMYKNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>num_channels</dt>
+<dd class="description">Number of color components</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New CMYK separation or NULL</p>
+<h3 class="function"><a name="cupsCMYKSetBlack">cupsCMYKSetBlack</a></h3>
+<p class="description">Set the transition range for CMY to black.</p>
+<p class="code">
+void cupsCMYKSetBlack (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float lower,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float upper<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>lower</dt>
+<dd class="description">No black ink</dd>
+<dt>upper</dt>
+<dd class="description">Only black ink</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetCurve">cupsCMYKSetCurve</a></h3>
+<p class="description">Set a color transform curve using points.</p>
+<p class="code">
+void cupsCMYKSetCurve (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int channel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_xypoints,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const float *xypoints<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>channel</dt>
+<dd class="description">Color channel</dd>
+<dt>num_xypoints</dt>
+<dd class="description">Number of X,Y points</dd>
+<dt>xypoints</dt>
+<dd class="description">X,Y points</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetGamma">cupsCMYKSetGamma</a></h3>
+<p class="description">Set a color transform curve using gamma and density.</p>
+<p class="code">
+void cupsCMYKSetGamma (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int channel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float gamval,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float density<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>channel</dt>
+<dd class="description">Ink channel</dd>
+<dt>gamval</dt>
+<dd class="description">Gamma correction</dd>
+<dt>density</dt>
+<dd class="description">Maximum density</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetInkLimit">cupsCMYKSetInkLimit</a></h3>
+<p class="description">Set the limit on the amount of ink.</p>
+<p class="code">
+void cupsCMYKSetInkLimit (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float limit<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>limit</dt>
+<dd class="description">Limit of ink</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetLtDk">cupsCMYKSetLtDk</a></h3>
+<p class="description">Set light/dark ink transforms.</p>
+<p class="code">
+void cupsCMYKSetLtDk (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int channel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float light,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float dark<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>channel</dt>
+<dd class="description">Dark ink channel (+1 for light)</dd>
+<dt>light</dt>
+<dd class="description">Light ink only level</dd>
+<dt>dark</dt>
+<dd class="description">Dark ink only level</dd>
+</dl>
+<h3 class="function"><a name="cupsCheckBytes">cupsCheckBytes</a></h3>
+<p class="description">Check to see if all bytes are zero.</p>
+<p class="code">
+int cupsCheckBytes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *bytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>bytes</dt>
+<dd class="description">Bytes to check</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to check</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if they match</p>
+<h3 class="function"><a name="cupsCheckValue">cupsCheckValue</a></h3>
+<p class="description">Check to see if all bytes match the given value.</p>
+<p class="code">
+int cupsCheckValue (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *bytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int length,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>bytes</dt>
+<dd class="description">Bytes to check</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to check</dd>
+<dt>value</dt>
+<dd class="description">Value to check</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if they match</p>
+<h3 class="function"><a name="cupsDitherDelete">cupsDitherDelete</a></h3>
+<p class="description">Free a dithering buffer.</p>
+<p class="code">
+void cupsDitherDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dither_t">cups_dither_t</a> *d<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>d</dt>
+<dd class="description">Dithering buffer</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns 0 on success, -1 on failure.</p>
+<h3 class="function"><a name="cupsDitherLine">cupsDitherLine</a></h3>
+<p class="description">Dither a line of pixels...</p>
+<p class="code">
+void cupsDitherLine (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dither_t">cups_dither_t</a> *d,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_lut_t">cups_lut_t</a> *lut,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const short *data,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *p<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>d</dt>
+<dd class="description">Dither data</dd>
+<dt>lut</dt>
+<dd class="description">Lookup table</dd>
+<dt>data</dt>
+<dd class="description">Separation data</dd>
+<dt>num_channels</dt>
+<dd class="description">Number of components</dd>
+<dt>p</dt>
+<dd class="description">Pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsDitherNew">cupsDitherNew</a></h3>
+<p class="description">Create an error-diffusion dithering buffer.</p>
+<p class="code">
+<a href="#cups_dither_t">cups_dither_t</a> *cupsDitherNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>width</dt>
+<dd class="description">Width of output in pixels</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New state array</p>
+<h3 class="function"><a name="cupsFindAttr">cupsFindAttr</a></h3>
+<p class="description">Find a PPD attribute based on the colormodel,
+media, and resolution.</p>
+<p class="code">
+ppd_attr_t *cupsFindAttr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *spec,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int specsize<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>name</dt>
+<dd class="description">Attribute name</dd>
+<dt>colormodel</dt>
+<dd class="description">Color model</dd>
+<dt>media</dt>
+<dd class="description">Media type</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution</dd>
+<dt>spec</dt>
+<dd class="description">Final selection string</dd>
+<dt>specsize</dt>
+<dd class="description">Size of string buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Matching attribute or NULL</p>
+<h3 class="function"><a name="cupsLutDelete">cupsLutDelete</a></h3>
+<p class="description">Free the memory used by a lookup table.</p>
+<p class="code">
+void cupsLutDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_lut_t">cups_lut_t</a> *lut<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>lut</dt>
+<dd class="description">Lookup table to free</dd>
+</dl>
+<h3 class="function"><a name="cupsLutLoad">cupsLutLoad</a></h3>
+<p class="description">Load a LUT from a PPD file.</p>
+<p class="code">
+<a href="#cups_lut_t">cups_lut_t</a> *cupsLutLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *ink<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>colormodel</dt>
+<dd class="description">Color model</dd>
+<dt>media</dt>
+<dd class="description">Media type</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution</dd>
+<dt>ink</dt>
+<dd class="description">Ink name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New lookup table</p>
+<h3 class="function"><a name="cupsLutNew">cupsLutNew</a></h3>
+<p class="description">Make a lookup table from a list of pixel values.</p>
+<p class="code">
+<a href="#cups_lut_t">cups_lut_t</a> *cupsLutNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const float *values<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>values</dt>
+<dd class="description">Lookup table values</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New lookup table</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns a pointer to the lookup table on success, NULL on failure.</p>
+<h3 class="function"><a name="cupsPackHorizontal">cupsPackHorizontal</a></h3>
+<p class="description">Pack pixels horizontally...</p>
+<p class="code">
+void cupsPackHorizontal (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char clearto,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int step<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of pixels</dd>
+<dt>clearto</dt>
+<dd class="description">Initial value of bytes</dd>
+<dt>step</dt>
+<dd class="description">Step value between pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsPackHorizontal2">cupsPackHorizontal2</a></h3>
+<p class="description">Pack 2-bit pixels horizontally...</p>
+<p class="code">
+void cupsPackHorizontal2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int step<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of pixels</dd>
+<dt>step</dt>
+<dd class="description">Stepping value</dd>
+</dl>
+<h3 class="function"><a name="cupsPackHorizontalBit">cupsPackHorizontalBit</a></h3>
+<p class="description">Pack pixels horizontally by bit...</p>
+<p class="code">
+void cupsPackHorizontalBit (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char clearto,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char bit<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of pixels</dd>
+<dt>clearto</dt>
+<dd class="description">Initial value of bytes</dd>
+<dt>bit</dt>
+<dd class="description">Bit to check</dd>
+</dl>
+<h3 class="function"><a name="cupsPackVertical">cupsPackVertical</a></h3>
+<p class="description">Pack pixels vertically...</p>
+<p class="code">
+void cupsPackVertical (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char bit,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int step<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of input pixels</dd>
+<dt>bit</dt>
+<dd class="description">Output bit</dd>
+<dt>step</dt>
+<dd class="description">Number of bytes between columns</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBDelete">cupsRGBDelete</a></h3>
+<p class="description">Delete a color separation.</p>
+<p class="code">
+void cupsRGBDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>rgbptr</dt>
+<dd class="description">Color separation</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBDoGray">cupsRGBDoGray</a></h3>
+<p class="description">Do a grayscale separation...</p>
+<p class="code">
+void cupsRGBDoGray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>rgbptr</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBDoRGB">cupsRGBDoRGB</a></h3>
+<p class="description">Do a RGB separation...</p>
+<p class="code">
+void cupsRGBDoRGB (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>rgbptr</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input RGB pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBLoad">cupsRGBLoad</a></h3>
+<p class="description">Load a RGB color profile from a PPD file.</p>
+<p class="code">
+<a href="#cups_rgb_t">cups_rgb_t</a> *cupsRGBLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>colormodel</dt>
+<dd class="description">Color model</dd>
+<dt>media</dt>
+<dd class="description">Media type</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New color profile</p>
+<h3 class="function"><a name="cupsRGBNew">cupsRGBNew</a></h3>
+<p class="description">Create a new RGB color separation.</p>
+<p class="code">
+<a href="#cups_rgb_t">cups_rgb_t</a> *cupsRGBNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_samples,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sample_t">cups_sample_t</a> *samples,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_size,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>num_samples</dt>
+<dd class="description">Number of samples</dd>
+<dt>samples</dt>
+<dd class="description">Samples</dd>
+<dt>cube_size</dt>
+<dd class="description">Size of LUT cube</dd>
+<dt>num_channels</dt>
+<dd class="description">Number of color components</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New color separation or NULL</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="cups_cmyk_t">cups_cmyk_t</a></h3>
+<p class="description">Simple CMYK lookup table</p>
+<p class="code">
+typedef struct <a href="#cups_cmyk_s">cups_cmyk_s</a> cups_cmyk_t;
+</p>
+<h3 class="typedef"><a name="cups_dither_t">cups_dither_t</a></h3>
+<p class="description">Dithering State</p>
+<p class="code">
+typedef struct <a href="#cups_dither_s">cups_dither_s</a> cups_dither_t;
+</p>
+<h3 class="typedef"><a name="cups_lut_t">cups_lut_t</a></h3>
+<p class="description">Lookup Table for Dithering</p>
+<p class="code">
+typedef struct <a href="#cups_lut_s">cups_lut_s</a> cups_lut_t;
+</p>
+<h3 class="typedef"><a name="cups_rgb_t">cups_rgb_t</a></h3>
+<p class="description">Color separation lookup table</p>
+<p class="code">
+typedef struct <a href="#cups_rgb_s">cups_rgb_s</a> cups_rgb_t;
+</p>
+<h3 class="typedef"><a name="cups_sample_t">cups_sample_t</a></h3>
+<p class="description">Color sample point</p>
+<p class="code">
+typedef struct <a href="#cups_sample_s">cups_sample_s</a> cups_sample_t;
+</p>
+<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><a name="cups_cmyk_s">cups_cmyk_s</a></h3>
+<p class="description">Simple CMYK lookup table</p>
+<p class="code">struct cups_cmyk_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char black_lut[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *channels[CUPS_MAX_CHAN];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char color_lut[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int ink_limit;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>black_lut[256] </dt>
+<dd class="description">Black generation LUT</dd>
+<dt>channels[CUPS_MAX_CHAN] </dt>
+<dd class="description">Lookup tables</dd>
+<dt>color_lut[256] </dt>
+<dd class="description">Color removal LUT</dd>
+<dt>ink_limit </dt>
+<dd class="description">Ink limit</dd>
+<dt>num_channels </dt>
+<dd class="description">Number of components</dd>
+</dl>
+<h3 class="struct"><a name="cups_dither_s">cups_dither_s</a></h3>
+<p class="description">Dithering State</p>
+<p class="code">struct cups_dither_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int errors[96];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int row;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>errors[96] </dt>
+<dd class="description">Error values</dd>
+<dt>row </dt>
+<dd class="description">Current row</dd>
+<dt>width </dt>
+<dd class="description">Width of buffer</dd>
+</dl>
+<h3 class="struct"><a name="cups_lut_s">cups_lut_s</a></h3>
+<p class="description">Lookup Table for Dithering</p>
+<p class="code">struct cups_lut_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int error;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short intensity;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short pixel;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>error </dt>
+<dd class="description">Error from desired value</dd>
+<dt>intensity </dt>
+<dd class="description">Adjusted intensity</dd>
+<dt>pixel </dt>
+<dd class="description">Output pixel value</dd>
+</dl>
+<h3 class="struct"><a name="cups_rgb_s">cups_rgb_s</a></h3>
+<p class="description">Color separation lookup table</p>
+<p class="code">struct cups_rgb_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char black[CUPS_MAX_RGB];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cache_init;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char ****colors;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_index[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_mult[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_size;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char white[CUPS_MAX_RGB];<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>black[CUPS_MAX_RGB] </dt>
+<dd class="description">Cached black (sRGB = 0,0,0)</dd>
+<dt>cache_init </dt>
+<dd class="description">Are cached values initialized?</dd>
+<dt>colors </dt>
+<dd class="description">4-D array of sample values</dd>
+<dt>cube_index[256] </dt>
+<dd class="description">Index into cube for a given sRGB value</dd>
+<dt>cube_mult[256] </dt>
+<dd class="description">Multiplier value for a given sRGB value</dd>
+<dt>cube_size </dt>
+<dd class="description">Size of color cube (2-N) on a side</dd>
+<dt>num_channels </dt>
+<dd class="description">Number of colors per sample</dd>
+<dt>white[CUPS_MAX_RGB] </dt>
+<dd class="description">Cached white (sRGB = 255,255,255)</dd>
+</dl>
+<h3 class="struct"><a name="cups_sample_s">cups_sample_s</a></h3>
+<p class="description">Color sample point</p>
+<p class="code">struct cups_sample_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char colors[CUPS_MAX_RGB];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char rgb[3];<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>colors[CUPS_MAX_RGB] </dt>
+<dd class="description">Color values</dd>
+<dt>rgb[3] </dt>
+<dd class="description">sRGB values</dd>
+</dl>
+<h2 class="title"><a name="VARIABLES">Variables</a></h2>
+<h3 class="variable"><a name="cups_scmy_lut[256]">cups_scmy_lut[256]</a></h3>
+<p class="description">sRGB gamma lookup table (inverted)</p>
+<p class="code">extern const unsigned char cups_scmy_lut[256];</p>
+<h3 class="variable"><a name="cups_srgb_lut[256]">cups_srgb_lut[256]</a></h3>
+<p class="description">sRGB gamma lookup table</p>
+<p class="code">extern const unsigned char cups_srgb_lut[256];</p>
+</div>
+</body>
+</html>
diff --git a/doc/help/api-filedir.html b/doc/help/api-filedir.html
index 13ab31f75..a91c7d273 100644
--- a/doc/help/api-filedir.html
+++ b/doc/help/api-filedir.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/help/api-filter.html b/doc/help/api-filter.html
index 54ae977f5..29347b08a 100644
--- a/doc/help/api-filter.html
+++ b/doc/help/api-filter.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/help/api-httpipp.html b/doc/help/api-httpipp.html
index 899fe8cde..444fe5870 100644
--- a/doc/help/api-httpipp.html
+++ b/doc/help/api-httpipp.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
@@ -507,6 +511,10 @@ in seconds.">ippDateToTime</a></li>
<li><a href="#ippWriteIO" title="Write data for an IPP message.">ippWriteIO</a></li>
</ul></li>
<li><a href="#TYPES">Data Types</a><ul class="code">
+ <li><a href="#http_addr_t" title="Socket address union, which
+makes using IPv6 and other
+address types easier and
+more portable. ">http_addr_t</a></li>
<li><a href="#http_addrlist_t" title="Socket address list, which is
used to enumerate all of the
addresses that are associated
@@ -515,30 +523,29 @@ with a hostname. ">http_addrlist_t</a></li>
<li><a href="#http_encoding_t" title="HTTP transfer encoding values">http_encoding_t</a></li>
<li><a href="#http_encryption_t" title="HTTP encryption values">http_encryption_t</a></li>
<li><a href="#http_field_t" title="HTTP field names">http_field_t</a></li>
- <li><a href="#http_keepalive_t" title="Types and structures...">http_keepalive_t</a></li>
+ <li><a href="#http_keepalive_t" title="HTTP keep-alive values">http_keepalive_t</a></li>
+ <li><a href="#http_state_t" title="HTTP state values; states
+are server-oriented...">http_state_t</a></li>
<li><a href="#http_status_t" title="HTTP status codes">http_status_t</a></li>
<li><a href="#http_t" title="HTTP connection type">http_t</a></li>
- <li><a href="#http_uri_coding_t" title="HTTP version numbers">http_uri_coding_t</a></li>
- <li><a href="#http_uri_status_t" title="URI en/decode flags">http_uri_status_t</a></li>
- <li><a href="#http_version_t" title="Socket address union, which
-makes using IPv6 and other
-address types easier and
-more portable. ">http_version_t</a></li>
+ <li><a href="#http_uri_coding_t" title="URI en/decode flags">http_uri_coding_t</a></li>
+ <li><a href="#http_uri_status_t" title="URI separation status ">http_uri_status_t</a></li>
+ <li><a href="#http_version_t" title="HTTP version numbers">http_version_t</a></li>
<li><a href="#ipp_attribute_t" title="Attribute">ipp_attribute_t</a></li>
- <li><a href="#ipp_finish_t" title="Orientation...">ipp_finish_t</a></li>
+ <li><a href="#ipp_finish_t" title="Finishings...">ipp_finish_t</a></li>
<li><a href="#ipp_iocb_t" title="IPP IO Callback Function ">ipp_iocb_t</a></li>
- <li><a href="#ipp_jstate_t" title="Printer States....">ipp_jstate_t</a></li>
- <li><a href="#ipp_op_t" title="Old names for the operations">ipp_op_t</a></li>
- <li><a href="#ipp_orient_t" title="Qualities...">ipp_orient_t</a></li>
- <li><a href="#ipp_pstate_t" title="IPP states...">ipp_pstate_t</a></li>
- <li><a href="#ipp_quality_t" title="Job States....">ipp_quality_t</a></li>
+ <li><a href="#ipp_jstate_t" title="Job States....">ipp_jstate_t</a></li>
+ <li><a href="#ipp_op_t" title="IPP operations...">ipp_op_t</a></li>
+ <li><a href="#ipp_orient_t" title="Orientation...">ipp_orient_t</a></li>
+ <li><a href="#ipp_pstate_t" title="Printer States....">ipp_pstate_t</a></li>
+ <li><a href="#ipp_quality_t" title="Qualities...">ipp_quality_t</a></li>
<li><a href="#ipp_request_t" title="Request Header">ipp_request_t</a></li>
- <li><a href="#ipp_res_t" title="Types and structures...">ipp_res_t</a></li>
- <li><a href="#ipp_state_t" title="IPP operations...">ipp_state_t</a></li>
+ <li><a href="#ipp_res_t" title="Resolution units...">ipp_res_t</a></li>
+ <li><a href="#ipp_state_t" title="IPP states...">ipp_state_t</a></li>
<li><a href="#ipp_t" title="Attribute Value">ipp_t</a></li>
<li><a href="#ipp_uchar_t" title="IPP status codes...">ipp_uchar_t</a></li>
<li><a href="#ipp_tag_t" title="Format tags for attributes...">ipp_tag_t</a></li>
- <li><a href="#ipp_value_t" title="New in CUPS 1.1.19">ipp_value_t</a></li>
+ <li><a href="#ipp_value_t" title="Attribute Value">ipp_value_t</a></li>
</ul></li>
<li><a href="#STRUCTURES">Structures</a><ul class="code">
<li><a href="#http_addrlist_s" title="Socket address list, which is
@@ -550,27 +557,28 @@ with a hostname. ">http_addrlist_s</a></li>
</ul></li>
<li><a href="#UNIONS">Unions</a><ul class="code">
<li><a href="#ipp_request_u" title="Request Header">ipp_request_u</a></li>
- <li><a href="#ipp_value_u" title="New in CUPS 1.1.19">ipp_value_u</a></li>
+ <li><a href="#ipp_value_u" title="Attribute Value">ipp_value_u</a></li>
</ul></li>
<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
<li><a href="#http_auth_e" title="HTTP authentication types">http_auth_e</a></li>
<li><a href="#http_encoding_e" title="HTTP transfer encoding values">http_encoding_e</a></li>
<li><a href="#http_encryption_e" title="HTTP encryption values">http_encryption_e</a></li>
<li><a href="#http_field_e" title="HTTP field names">http_field_e</a></li>
- <li><a href="#http_keepalive_e" title="Types and structures...">http_keepalive_e</a></li>
- <li><a href="#http_state_e" title="">http_state_e</a></li>
+ <li><a href="#http_keepalive_e" title="HTTP keep-alive values">http_keepalive_e</a></li>
+ <li><a href="#http_state_e" title="HTTP state values; states
+are server-oriented...">http_state_e</a></li>
<li><a href="#http_status_e" title="HTTP status codes">http_status_e</a></li>
- <li><a href="#http_uri_coding_e" title="">http_uri_coding_e</a></li>
- <li><a href="#http_uri_status_e" title="">http_uri_status_e</a></li>
- <li><a href="#http_version_e" title="">http_version_e</a></li>
- <li><a href="#ipp_finish_e" title="">ipp_finish_e</a></li>
- <li><a href="#ipp_jstate_e" title="">ipp_jstate_e</a></li>
- <li><a href="#ipp_op_e" title="">ipp_op_e</a></li>
- <li><a href="#ipp_orient_e" title="">ipp_orient_e</a></li>
- <li><a href="#ipp_pstate_e" title="">ipp_pstate_e</a></li>
- <li><a href="#ipp_quality_e" title="">ipp_quality_e</a></li>
- <li><a href="#ipp_res_e" title="Types and structures...">ipp_res_e</a></li>
- <li><a href="#ipp_state_e" title="">ipp_state_e</a></li>
+ <li><a href="#http_uri_coding_e" title="URI en/decode flags">http_uri_coding_e</a></li>
+ <li><a href="#http_uri_status_e" title="URI separation status ">http_uri_status_e</a></li>
+ <li><a href="#http_version_e" title="HTTP version numbers">http_version_e</a></li>
+ <li><a href="#ipp_finish_e" title="Finishings...">ipp_finish_e</a></li>
+ <li><a href="#ipp_jstate_e" title="Job States....">ipp_jstate_e</a></li>
+ <li><a href="#ipp_op_e" title="IPP operations...">ipp_op_e</a></li>
+ <li><a href="#ipp_orient_e" title="Orientation...">ipp_orient_e</a></li>
+ <li><a href="#ipp_pstate_e" title="Printer States....">ipp_pstate_e</a></li>
+ <li><a href="#ipp_quality_e" title="Qualities...">ipp_quality_e</a></li>
+ <li><a href="#ipp_res_e" title="Resolution units...">ipp_res_e</a></li>
+ <li><a href="#ipp_state_e" title="IPP states...">ipp_state_e</a></li>
<li><a href="#ipp_status_e" title="IPP status codes...">ipp_status_e</a></li>
<li><a href="#ipp_tag_e" title="Format tags for attributes...">ipp_tag_e</a></li>
</ul></li>
@@ -3233,6 +3241,14 @@ const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippTimeToDate (<br>
<h4 class="returnvalue">Return Value</h4>
<p class="description">Current state</p>
<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span><a name="http_addr_t">http_addr_t</a></h3>
+<p class="description">Socket address union, which
+makes using IPv6 and other
+address types easier and
+more portable. </p>
+<p class="code">
+typedef union _http_addr_u / http_addr_t;
+</p>
<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span><a name="http_addrlist_t">http_addrlist_t</a></h3>
<p class="description">Socket address list, which is
used to enumerate all of the
@@ -3262,10 +3278,16 @@ typedef enum <a href="#http_encryption_e">http_encryption_e</a> http_encryption_
typedef enum <a href="#http_field_e">http_field_e</a> http_field_t;
</p>
<h3 class="typedef"><a name="http_keepalive_t">http_keepalive_t</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">HTTP keep-alive values</p>
<p class="code">
typedef enum <a href="#http_keepalive_e">http_keepalive_e</a> http_keepalive_t;
</p>
+<h3 class="typedef"><a name="http_state_t">http_state_t</a></h3>
+<p class="description">HTTP state values; states
+are server-oriented...</p>
+<p class="code">
+typedef enum <a href="#http_state_e">http_state_e</a> / http_state_t;
+</p>
<h3 class="typedef"><a name="http_status_t">http_status_t</a></h3>
<p class="description">HTTP status codes</p>
<p class="code">
@@ -3277,20 +3299,17 @@ typedef enum <a href="#http_status_e">http_status_e</a> http_status_t;
typedef struct _http_s http_t;
</p>
<h3 class="typedef"><a name="http_uri_coding_t">http_uri_coding_t</a></h3>
-<p class="description">HTTP version numbers</p>
+<p class="description">URI en/decode flags</p>
<p class="code">
typedef enum <a href="#http_uri_coding_e">http_uri_coding_e</a> http_uri_coding_t;
</p>
-<h3 class="typedef"><a name="http_uri_status_t">http_uri_status_t</a></h3>
-<p class="description">URI en/decode flags</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS1.2&nbsp;</span><a name="http_uri_status_t">http_uri_status_t</a></h3>
+<p class="description">URI separation status </p>
<p class="code">
typedef enum <a href="#http_uri_status_e">http_uri_status_e</a> http_uri_status_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span><a name="http_version_t">http_version_t</a></h3>
-<p class="description">Socket address union, which
-makes using IPv6 and other
-address types easier and
-more portable. </p>
+<h3 class="typedef"><a name="http_version_t">http_version_t</a></h3>
+<p class="description">HTTP version numbers</p>
<p class="code">
typedef enum <a href="#http_version_e">http_version_e</a> http_version_t;
</p>
@@ -3300,7 +3319,7 @@ typedef enum <a href="#http_version_e">http_version_e</a> http_version_t;
typedef struct <a href="#ipp_attribute_s">ipp_attribute_s</a> ipp_attribute_t;
</p>
<h3 class="typedef"><a name="ipp_finish_t">ipp_finish_t</a></h3>
-<p class="description">Orientation...</p>
+<p class="description">Finishings...</p>
<p class="code">
typedef enum <a href="#ipp_finish_e">ipp_finish_e</a> ipp_finish_t;
</p>
@@ -3310,27 +3329,27 @@ typedef enum <a href="#ipp_finish_e">ipp_finish_e</a> ipp_finish_t;
typedef ssize_t (*ipp_iocb_t)(void *, <a href="#ipp_uchar_t">ipp_uchar_t</a> *, size_t);
</p>
<h3 class="typedef"><a name="ipp_jstate_t">ipp_jstate_t</a></h3>
-<p class="description">Printer States....</p>
+<p class="description">Job States....</p>
<p class="code">
typedef enum <a href="#ipp_jstate_e">ipp_jstate_e</a> ipp_jstate_t;
</p>
<h3 class="typedef"><a name="ipp_op_t">ipp_op_t</a></h3>
-<p class="description">Old names for the operations</p>
+<p class="description">IPP operations...</p>
<p class="code">
typedef enum <a href="#ipp_op_e">ipp_op_e</a> ipp_op_t;
</p>
<h3 class="typedef"><a name="ipp_orient_t">ipp_orient_t</a></h3>
-<p class="description">Qualities...</p>
+<p class="description">Orientation...</p>
<p class="code">
typedef enum <a href="#ipp_orient_e">ipp_orient_e</a> ipp_orient_t;
</p>
<h3 class="typedef"><a name="ipp_pstate_t">ipp_pstate_t</a></h3>
-<p class="description">IPP states...</p>
+<p class="description">Printer States....</p>
<p class="code">
typedef enum <a href="#ipp_pstate_e">ipp_pstate_e</a> ipp_pstate_t;
</p>
<h3 class="typedef"><a name="ipp_quality_t">ipp_quality_t</a></h3>
-<p class="description">Job States....</p>
+<p class="description">Qualities...</p>
<p class="code">
typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
</p>
@@ -3340,12 +3359,12 @@ typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
typedef union <a href="#ipp_request_u">ipp_request_u</a> ipp_request_t;
</p>
<h3 class="typedef"><a name="ipp_res_t">ipp_res_t</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">Resolution units...</p>
<p class="code">
typedef enum <a href="#ipp_res_e">ipp_res_e</a> ipp_res_t;
</p>
<h3 class="typedef"><a name="ipp_state_t">ipp_state_t</a></h3>
-<p class="description">IPP operations...</p>
+<p class="description">IPP states...</p>
<p class="code">
typedef enum <a href="#ipp_state_e">ipp_state_e</a> ipp_state_t;
</p>
@@ -3365,7 +3384,7 @@ typedef typedef unsigned char ipp_uchar_t;
typedef enum <a href="#ipp_tag_e">ipp_tag_e</a> ipp_tag_t;
</p>
<h3 class="typedef"><a name="ipp_value_t">ipp_value_t</a></h3>
-<p class="description">New in CUPS 1.1.19</p>
+<p class="description">Attribute Value</p>
<p class="code">
typedef union <a href="#ipp_value_u">ipp_value_u</a> ipp_value_t;
</p>
@@ -3445,7 +3464,7 @@ with a hostname. </p>
<dl>
</dl>
<h3 class="union"><a name="ipp_value_u">ipp_value_u</a></h3>
-<p class="description">New in CUPS 1.1.19</p>
+<p class="description">Attribute Value</p>
<p class="code">union ipp_value_u {<br>
&nbsp;&nbsp;&nbsp;&nbsp;char boolean;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *collection;<br>
@@ -3571,7 +3590,7 @@ with a hostname. </p>
<dd class="description">WWW-Authenticate field</dd>
</dl>
<h3 class="enumeration"><a name="http_keepalive_e">http_keepalive_e</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">HTTP keep-alive values</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>HTTP_KEEPALIVE_OFF </dt>
@@ -3580,7 +3599,8 @@ with a hostname. </p>
<dd class="description">Use keep alive</dd>
</dl>
<h3 class="enumeration"><a name="http_state_e">http_state_e</a></h3>
-<p class="description"></p>
+<p class="description">HTTP state values; states
+are server-oriented...</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>HTTP_CLOSE </dt>
@@ -3618,6 +3638,8 @@ with a hostname. </p>
<dl>
<dt>HTTP_ACCEPTED </dt>
<dd class="description">DELETE command was successful</dd>
+<dt>HTTP_AUTHORIZATION_CANCELED </dt>
+<dd class="description">User cancelled authorization</dd>
<dt>HTTP_BAD_GATEWAY </dt>
<dd class="description">Bad gateway</dd>
<dt>HTTP_BAD_REQUEST </dt>
@@ -3700,7 +3722,7 @@ with a hostname. </p>
<dd class="description">Must use a proxy to access this URI</dd>
</dl>
<h3 class="enumeration"><a name="http_uri_coding_e">http_uri_coding_e</a></h3>
-<p class="description"></p>
+<p class="description">URI en/decode flags</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>HTTP_URI_CODING_ALL </dt>
@@ -3718,8 +3740,8 @@ with a hostname. </p>
<dt>HTTP_URI_CODING_USERNAME </dt>
<dd class="description">En/decode the username portion</dd>
</dl>
-<h3 class="enumeration"><a name="http_uri_status_e">http_uri_status_e</a></h3>
-<p class="description"></p>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS1.2&nbsp;</span><a name="http_uri_status_e">http_uri_status_e</a></h3>
+<p class="description">URI separation status </p>
<h4 class="constants">Constants</h4>
<dl>
<dt>HTTP_URI_BAD_ARGUMENTS </dt>
@@ -3748,7 +3770,7 @@ with a hostname. </p>
<dd class="description">Unknown scheme in URI (warning)</dd>
</dl>
<h3 class="enumeration"><a name="http_version_e">http_version_e</a></h3>
-<p class="description"></p>
+<p class="description">HTTP version numbers</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>HTTP_0_9 </dt>
@@ -3759,7 +3781,7 @@ with a hostname. </p>
<dd class="description">HTTP/1.1</dd>
</dl>
<h3 class="enumeration"><a name="ipp_finish_e">ipp_finish_e</a></h3>
-<p class="description"></p>
+<p class="description">Finishings...</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>IPP_FINISHINGS_BALE </dt>
@@ -3820,7 +3842,7 @@ with a hostname. </p>
<dd class="description">Trim (any type)</dd>
</dl>
<h3 class="enumeration"><a name="ipp_jstate_e">ipp_jstate_e</a></h3>
-<p class="description"></p>
+<p class="description">Job States....</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>IPP_JOB_ABORTED </dt>
@@ -3839,7 +3861,7 @@ with a hostname. </p>
<dd class="description">Job has been stopped</dd>
</dl>
<h3 class="enumeration"><a name="ipp_op_e">ipp_op_e</a></h3>
-<p class="description"></p>
+<p class="description">IPP operations...</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_ACCEPT_JOBS </dt>
@@ -3926,7 +3948,7 @@ with a hostname. </p>
<dd class="description">Validate job options</dd>
</dl>
<h3 class="enumeration"><a name="ipp_orient_e">ipp_orient_e</a></h3>
-<p class="description"></p>
+<p class="description">Orientation...</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>IPP_LANDSCAPE </dt>
@@ -3939,7 +3961,7 @@ with a hostname. </p>
<dd class="description">180 degrees</dd>
</dl>
<h3 class="enumeration"><a name="ipp_pstate_e">ipp_pstate_e</a></h3>
-<p class="description"></p>
+<p class="description">Printer States....</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>IPP_PRINTER_IDLE </dt>
@@ -3950,7 +3972,7 @@ with a hostname. </p>
<dd class="description">Printer is stopped</dd>
</dl>
<h3 class="enumeration"><a name="ipp_quality_e">ipp_quality_e</a></h3>
-<p class="description"></p>
+<p class="description">Qualities...</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>IPP_QUALITY_DRAFT </dt>
@@ -3961,7 +3983,7 @@ with a hostname. </p>
<dd class="description">Normal quality</dd>
</dl>
<h3 class="enumeration"><a name="ipp_res_e">ipp_res_e</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">Resolution units...</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>IPP_RES_PER_CM </dt>
@@ -3970,7 +3992,7 @@ with a hostname. </p>
<dd class="description">Pixels per inch</dd>
</dl>
<h3 class="enumeration"><a name="ipp_state_e">ipp_state_e</a></h3>
-<p class="description"></p>
+<p class="description">IPP states...</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>IPP_ATTRIBUTE </dt>
diff --git a/doc/help/api-mime.html b/doc/help/api-mime.html
new file mode 100644
index 000000000..7d759781f
--- /dev/null
+++ b/doc/help/api-mime.html
@@ -0,0 +1,715 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>MIME API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<style type="text/css"><!--
+BODY {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+H1, H2, H3, H4, H5, H6, P, TD, TH {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+KBD {
+ font-family: monaco, courier, monospace;
+ font-weight: bold;
+}
+
+PRE {
+ font-family: monaco, courier, monospace;
+}
+
+PRE.command {
+ margin-left: 36pt;
+}
+
+P.compact {
+ margin: 0;
+}
+
+P.example {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+PRE.example {
+ background: #eeeeee;
+ border: dotted thin #999999;
+ margin-left: 36pt;
+ padding: 10px;
+}
+
+PRE.command EM, PRE.example EM {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+P.command {
+ font-family: monaco, courier, monospace;
+ margin-left: 36pt;
+}
+
+P.formula {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+BLOCKQUOTE {
+ background: #cccccc;
+ border: solid thin #999999;
+ padding: 10pt;
+}
+
+A IMG {
+ border: none;
+}
+
+A:link:hover IMG {
+ background: #f0f0f0;
+ border-radius: 10px;
+ -moz-border-radius: 10px;
+}
+
+A:link, A:visited {
+ font-weight: normal;
+ text-decoration: none;
+}
+
+A:link:hover, A:visited:hover, A:active {
+ text-decoration: underline;
+}
+
+SUB, SUP {
+ font-size: 50%;
+}
+
+TR.data, TD.data, TR.data TD {
+ margin-top: 10pt;
+ padding: 5pt;
+ border-bottom: solid 1pt #999999;
+}
+
+TR.data TH {
+ border-bottom: solid 1pt #999999;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+}
+
+DIV.table TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table CAPTION {
+ caption-side: top;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table TABLE TD {
+ border: solid thin #cccccc;
+ padding-top: 5pt;
+}
+
+DIV.table TABLE TH {
+ background: #cccccc;
+ border: none;
+ border-bottom: solid thin #999999;
+}
+
+DIV.figure TABLE {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.figure CAPTION {
+ caption-side: bottom;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+TH.label {
+ text-align: right;
+ vertical-align: top;
+}
+
+TH.sublabel {
+ text-align: right;
+ font-weight: normal;
+}
+
+HR {
+ border: solid thin;
+}
+
+SPAN.info {
+ background: black;
+ border: thin solid black;
+ color: white;
+ font-size: 80%;
+ font-style: italic;
+ font-weight: bold;
+ white-space: nowrap;
+}
+
+H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
+ float: right;
+ font-size: 100%;
+}
+
+H2.title, H3.title {
+ border-bottom: solid 2pt #000000;
+}
+
+DIV.indent, TABLE.indent {
+ margin-top: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.indent {
+ border-collapse: collapse;
+}
+
+TABLE.indent TD, TABLE.indent TH {
+ padding: 0;
+}
+
+TABLE.list {
+ border-collapse: collapse;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.list TH {
+ background: white;
+ border-bottom: solid thin #cccccc;
+ color: #444444;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+ vertical-align: bottom;
+ white-space: nowrap;
+}
+
+TABLE.list TH A {
+ color: #4444cc;
+}
+
+TABLE.list TD {
+ border-bottom: solid thin #eeeeee;
+ padding-top: 5pt;
+ padding-left: 5pt;
+}
+
+TABLE.list TR:nth-child(even) {
+ background: #f8f8f8;
+}
+
+TABLE.list TR:nth-child(odd) {
+ background: #f4f4f4;
+}
+
+DT {
+ margin-left: 36pt;
+ margin-top: 12pt;
+}
+
+DD {
+ margin-left: 54pt;
+}
+
+DL.category DT {
+ font-weight: bold;
+}
+
+P.summary {
+ margin-left: 36pt;
+ font-family: monaco, courier, monospace;
+}
+
+DIV.summary TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin: 10px;
+}
+
+DIV.summary TABLE TD, DIV.summary TABLE TH {
+ border: solid thin #999999;
+ padding: 5px;
+ text-align: left;
+ vertical-align: top;
+}
+
+DIV.summary TABLE THEAD TH {
+ background: #eeeeee;
+}
+
+/* API documentation styles... */
+div.body h1 {
+ margin: 0;
+}
+div.body h2 {
+ margin-top: 1.5em;
+}
+div.body h3, div.body h4, div.body h5 {
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+.class, .enumeration, .function, .struct, .typedef, .union {
+ border-bottom: solid thin #999999;
+ margin-bottom: 0;
+ margin-top: 2em;
+}
+.description {
+ margin-top: 0.5em;
+}
+code, p.code, pre, ul.code li {
+ font-family: monaco, courier, monospace;
+ font-size: 90%;
+}
+ul.code, ul.contents, ul.subcontents {
+ list-style-type: none;
+ margin: 0;
+ padding-left: 0;
+}
+ul.code li {
+ margin: 0;
+}
+ul.contents > li {
+ margin-top: 1em;
+}
+ul.contents li ul.code, ul.contents li ul.subcontents {
+ padding-left: 2em;
+}
+div.body dl {
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dt {
+ font-style: italic;
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dd {
+ margin-bottom: 0.5em;
+}
+
+/* This is just for the HTML files generated with the framedhelp target */
+div.contents {
+ background: #e8e8e8;
+ border: solid thin black;
+ padding: 10px;
+}
+div.contents h1 {
+ font-size: 110%;
+}
+div.contents h2 {
+ font-size: 100%;
+}
+div.contents ul.contents {
+ font-size: 80%;
+}
+div.contents ul.subcontents li {
+ margin-left: 1em;
+ text-indent: -1em;
+}
+--></style>
+</head>
+<body>
+<div class='body'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+<li><a href="#mimeAddFilter" title="Add a filter to the current MIME database.">mimeAddFilter</a></li>
+<li><a href="#mimeAddType" title="Add a MIME type to a database.">mimeAddType</a></li>
+<li><a href="#mimeAddTypeRule" title="Add a detection rule for a file type.">mimeAddTypeRule</a></li>
+<li><a href="#mimeDelete" title="Delete (free) a MIME database.">mimeDelete</a></li>
+<li><a href="#mimeDeleteFilter" title="Delete a filter from the MIME database.">mimeDeleteFilter</a></li>
+<li><a href="#mimeDeleteType" title="Delete a type from the MIME database.">mimeDeleteType</a></li>
+<li><a href="#mimeFileType" title="Determine the type of a file.">mimeFileType</a></li>
+<li><a href="#mimeFilter" title="Find the fastest way to convert from one type to another.">mimeFilter</a></li>
+<li><a href="#mimeFilterLookup" title="Lookup a filter...">mimeFilterLookup</a></li>
+<li><a href="#mimeFirstFilter" title="Get the first filter in the MIME database.">mimeFirstFilter</a></li>
+<li><a href="#mimeFirstType" title="Get the first type in the MIME database.">mimeFirstType</a></li>
+<li><a href="#mimeLoad" title="Create a new MIME database from disk.">mimeLoad</a></li>
+<li><a href="#mimeLoadFilters" title="Load filter definitions from disk.">mimeLoadFilters</a></li>
+<li><a href="#mimeLoadTypes" title="Load type definitions from disk.">mimeLoadTypes</a></li>
+<li><a href="#mimeNextFilter" title="Get the next filter in the MIME database.">mimeNextFilter</a></li>
+<li><a href="#mimeNextType" title="Get the next type in the MIME database.">mimeNextType</a></li>
+<li><a href="#mimeNumFilters" title="MIME database">mimeNumFilters</a></li>
+<li><a href="#mimeNumTypes" title="MIME database">mimeNumTypes</a></li>
+<li><a href="#mimeType" title="Lookup a file type.">mimeType</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+ <li><a href="#mime_filter_t" title="MIME Conversion Filter Data">mime_filter_t</a></li>
+ <li><a href="#mime_magic_t" title="MIME Magic Data">mime_magic_t</a></li>
+ <li><a href="#mime_op_t" title="Types/structures...">mime_op_t</a></li>
+ <li><a href="#mime_t" title="MIME Database">mime_t</a></li>
+ <li><a href="#mime_type_t" title="MIME Type Data">mime_type_t</a></li>
+</ul></li>
+<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a name="mimeAddFilter">mimeAddFilter</a></h3>
+<p class="description">Add a filter to the current MIME database.</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeAddFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cost,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filter<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>src</dt>
+<dd class="description">Source type</dd>
+<dt>dst</dt>
+<dd class="description">Destination type</dd>
+<dt>cost</dt>
+<dd class="description">Relative time/resource cost</dd>
+<dt>filter</dt>
+<dd class="description">Filter program to run</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New filter</p>
+<h3 class="function"><a name="mimeAddType">mimeAddType</a></h3>
+<p class="description">Add a MIME type to a database.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeAddType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *super,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *type<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>super</dt>
+<dd class="description">Super-type name</dd>
+<dt>type</dt>
+<dd class="description">Type name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New (or existing) MIME type</p>
+<h3 class="function"><a name="mimeAddTypeRule">mimeAddTypeRule</a></h3>
+<p class="description">Add a detection rule for a file type.</p>
+<p class="code">
+int mimeAddTypeRule (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *mt,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *rule<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mt</dt>
+<dd class="description">Type to add to</dd>
+<dt>rule</dt>
+<dd class="description">Rule to add</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, -1 on failure</p>
+<h3 class="function"><a name="mimeDelete">mimeDelete</a></h3>
+<p class="description">Delete (free) a MIME database.</p>
+<p class="code">
+void mimeDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h3 class="function"><a name="mimeDeleteFilter">mimeDeleteFilter</a></h3>
+<p class="description">Delete a filter from the MIME database.</p>
+<p class="code">
+void mimeDeleteFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_filter_t">mime_filter_t</a> *filter<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>filter</dt>
+<dd class="description">Filter</dd>
+</dl>
+<h3 class="function"><a name="mimeDeleteType">mimeDeleteType</a></h3>
+<p class="description">Delete a type from the MIME database.</p>
+<p class="code">
+void mimeDeleteType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *mt<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>mt</dt>
+<dd class="description">Type</dd>
+</dl>
+<h3 class="function"><a name="mimeFileType">mimeFileType</a></h3>
+<p class="description">Determine the type of a file.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeFileType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *compression<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>pathname</dt>
+<dd class="description">Name of file to check on disk</dd>
+<dt>filename</dt>
+<dd class="description">Original filename or NULL</dd>
+<dt>compression</dt>
+<dd class="description">Is the file compressed?</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Type of file</p>
+<h3 class="function"><a name="mimeFilter">mimeFilter</a></h3>
+<p class="description">Find the fastest way to convert from one type to another.</p>
+<p class="code">
+cups_array_t *mimeFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *cost<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>src</dt>
+<dd class="description">Source file type</dd>
+<dt>dst</dt>
+<dd class="description">Destination file type</dd>
+<dt>cost</dt>
+<dd class="description">Cost of filters</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Array of filters to run</p>
+<h3 class="function"><a name="mimeFilterLookup">mimeFilterLookup</a></h3>
+<p class="description">Lookup a filter...</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeFilterLookup (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *dst<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>src</dt>
+<dd class="description">Source type</dd>
+<dt>dst</dt>
+<dd class="description">Destination type</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Filter for src-&gt;dst</p>
+<h3 class="function"><a name="mimeFirstFilter">mimeFirstFilter</a></h3>
+<p class="description">Get the first filter in the MIME database.</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeFirstFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Filter or NULL</p>
+<h3 class="function"><a name="mimeFirstType">mimeFirstType</a></h3>
+<p class="description">Get the first type in the MIME database.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeFirstType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Type or NULL</p>
+<h3 class="function"><a name="mimeLoad">mimeLoad</a></h3>
+<p class="description">Create a new MIME database from disk.</p>
+<p class="code">
+<a href="#mime_t">mime_t</a> *mimeLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filterpath<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>pathname</dt>
+<dd class="description">Directory to load</dd>
+<dt>filterpath</dt>
+<dd class="description">Directory to load</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New MIME database</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function uses <a href="#mimeLoadFilters"><code>mimeLoadFilters</code></a> and <a href="#mimeLoadTypes"><code>mimeLoadTypes</code></a> to
+create a MIME database from a single directory.</p>
+<h3 class="function"><a name="mimeLoadFilters">mimeLoadFilters</a></h3>
+<p class="description">Load filter definitions from disk.</p>
+<p class="code">
+<a href="#mime_t">mime_t</a> *mimeLoadFilters (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filterpath<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>pathname</dt>
+<dd class="description">Directory to load from</dd>
+<dt>filterpath</dt>
+<dd class="description">Default filter program directory</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">MIME database</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function loads all of the .convs files from the specified directory.
+Use <a href="#mimeLoadTypes"><code>mimeLoadTypes</code></a> to load all types before you load the filters.</p>
+<h3 class="function"><a name="mimeLoadTypes">mimeLoadTypes</a></h3>
+<p class="description">Load type definitions from disk.</p>
+<p class="code">
+<a href="#mime_t">mime_t</a> *mimeLoadTypes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database or <code>NULL</code> to create a new one</dd>
+<dt>pathname</dt>
+<dd class="description">Directory to load from</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">MIME database</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function loads all of the .types files from the specified directory.
+Use <a href="#mimeLoadFilters"><code>mimeLoadFilters</code></a> to load all filters after you load the types.</p>
+<h3 class="function"><a name="mimeNextFilter">mimeNextFilter</a></h3>
+<p class="description">Get the next filter in the MIME database.</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeNextFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Filter or NULL</p>
+<h3 class="function"><a name="mimeNextType">mimeNextType</a></h3>
+<p class="description">Get the next type in the MIME database.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeNextType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Type or NULL</p>
+<h3 class="function"><a name="mimeNumFilters">mimeNumFilters</a></h3>
+<p class="description">MIME database</p>
+<p class="code">
+int mimeNumFilters (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Get the number of filters in a MIME database.</p>
+<h3 class="function"><a name="mimeNumTypes">mimeNumTypes</a></h3>
+<p class="description">MIME database</p>
+<p class="code">
+int mimeNumTypes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Get the number of types in a MIME database.</p>
+<h3 class="function"><a name="mimeType">mimeType</a></h3>
+<p class="description">Lookup a file type.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *super,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *type<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>super</dt>
+<dd class="description">Super-type name</dd>
+<dt>type</dt>
+<dd class="description">Type name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Matching file type definition</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="mime_filter_t">mime_filter_t</a></h3>
+<p class="description">MIME Conversion Filter Data</p>
+<p class="code">
+typedef struct _mime_filter_s mime_filter_t;
+</p>
+<h3 class="typedef"><a name="mime_magic_t">mime_magic_t</a></h3>
+<p class="description">MIME Magic Data</p>
+<p class="code">
+typedef struct _mime_magic_s mime_magic_t;
+</p>
+<h3 class="typedef"><a name="mime_op_t">mime_op_t</a></h3>
+<p class="description">Types/structures...</p>
+<p class="code">
+typedef enum mime_op_t;
+</p>
+<h3 class="typedef"><a name="mime_t">mime_t</a></h3>
+<p class="description">MIME Database</p>
+<p class="code">
+typedef struct _mime_s mime_t;
+</p>
+<h3 class="typedef"><a name="mime_type_t">mime_type_t</a></h3>
+<p class="description">MIME Type Data</p>
+<p class="code">
+typedef struct _mime_type_s mime_type_t;
+</p>
+</div>
+</body>
+</html>
diff --git a/doc/help/api-overview.html b/doc/help/api-overview.html
index 4bf8c5466..b6e07808c 100644
--- a/doc/help/api-overview.html
+++ b/doc/help/api-overview.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/help/api-ppd.html b/doc/help/api-ppd.html
index 263e91b0d..56cd2abd0 100644
--- a/doc/help/api-ppd.html
+++ b/doc/help/api-ppd.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
@@ -444,7 +448,7 @@ conflicts.">ppdMarkOption</a></li>
<li><a href="#ppd_profile_t" title="sRGB Color Profiles">ppd_profile_t</a></li>
<li><a href="#ppd_section_t" title="Order dependency sections">ppd_section_t</a></li>
<li><a href="#ppd_size_t" title="Page Sizes">ppd_size_t</a></li>
- <li><a href="#ppd_status_t" title="Types and structures...">ppd_status_t</a></li>
+ <li><a href="#ppd_status_t" title="Status Codes ">ppd_status_t</a></li>
<li><a href="#ppd_ui_t" title="UI Types">ppd_ui_t</a></li>
</ul></li>
<li><a href="#STRUCTURES">Structures</a><ul class="code">
@@ -465,11 +469,11 @@ conflicts.">ppdMarkOption</a></li>
<li><a href="#ppd_cpvalue_u" title="Custom Parameter Value ">ppd_cpvalue_u</a></li>
</ul></li>
<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
- <li><a href="#ppd_conform_e" title="">ppd_conform_e</a></li>
+ <li><a href="#ppd_conform_e" title="Conformance Levels ">ppd_conform_e</a></li>
<li><a href="#ppd_cptype_e" title="Custom Parameter Type ">ppd_cptype_e</a></li>
<li><a href="#ppd_cs_e" title="Colorspaces">ppd_cs_e</a></li>
<li><a href="#ppd_section_e" title="Order dependency sections">ppd_section_e</a></li>
- <li><a href="#ppd_status_e" title="Types and structures...">ppd_status_e</a></li>
+ <li><a href="#ppd_status_e" title="Status Codes ">ppd_status_e</a></li>
<li><a href="#ppd_ui_e" title="UI Types">ppd_ui_e</a></li>
</ul></li>
<!--
@@ -1625,8 +1629,8 @@ typedef enum <a href="#ppd_section_e">ppd_section_e</a> ppd_section_t;
<p class="code">
typedef struct <a href="#ppd_size_s">ppd_size_s</a> ppd_size_t;
</p>
-<h3 class="typedef"><a name="ppd_status_t">ppd_status_t</a></h3>
-<p class="description">Types and structures...</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span><a name="ppd_status_t">ppd_status_t</a></h3>
+<p class="description">Status Codes </p>
<p class="code">
typedef enum <a href="#ppd_status_e">ppd_status_e</a> ppd_status_t;
</p>
@@ -2065,8 +2069,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<dd class="description">String value</dd>
</dl>
<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
-<h3 class="enumeration"><a name="ppd_conform_e">ppd_conform_e</a></h3>
-<p class="description"></p>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span><a name="ppd_conform_e">ppd_conform_e</a></h3>
+<p class="description">Conformance Levels </p>
<h4 class="constants">Constants</h4>
<dl>
<dt>PPD_CONFORM_RELAXED </dt>
@@ -2129,8 +2133,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
<dt>PPD_ORDER_PROLOG </dt>
<dd class="description">... must be in the Prolog section</dd>
</dl>
-<h3 class="enumeration"><a name="ppd_status_e">ppd_status_e</a></h3>
-<p class="description">Types and structures...</p>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span><a name="ppd_status_e">ppd_status_e</a></h3>
+<p class="description">Status Codes </p>
<h4 class="constants">Constants</h4>
<dl>
<dt>PPD_ALLOC_ERROR </dt>
diff --git a/doc/help/api-ppdc.html b/doc/help/api-ppdc.html
new file mode 100644
index 000000000..335626929
--- /dev/null
+++ b/doc/help/api-ppdc.html
@@ -0,0 +1,2121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>PPD Compiler API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<style type="text/css"><!--
+BODY {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+H1, H2, H3, H4, H5, H6, P, TD, TH {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+KBD {
+ font-family: monaco, courier, monospace;
+ font-weight: bold;
+}
+
+PRE {
+ font-family: monaco, courier, monospace;
+}
+
+PRE.command {
+ margin-left: 36pt;
+}
+
+P.compact {
+ margin: 0;
+}
+
+P.example {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+PRE.example {
+ background: #eeeeee;
+ border: dotted thin #999999;
+ margin-left: 36pt;
+ padding: 10px;
+}
+
+PRE.command EM, PRE.example EM {
+ font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+P.command {
+ font-family: monaco, courier, monospace;
+ margin-left: 36pt;
+}
+
+P.formula {
+ font-style: italic;
+ margin-left: 36pt;
+}
+
+BLOCKQUOTE {
+ background: #cccccc;
+ border: solid thin #999999;
+ padding: 10pt;
+}
+
+A IMG {
+ border: none;
+}
+
+A:link:hover IMG {
+ background: #f0f0f0;
+ border-radius: 10px;
+ -moz-border-radius: 10px;
+}
+
+A:link, A:visited {
+ font-weight: normal;
+ text-decoration: none;
+}
+
+A:link:hover, A:visited:hover, A:active {
+ text-decoration: underline;
+}
+
+SUB, SUP {
+ font-size: 50%;
+}
+
+TR.data, TD.data, TR.data TD {
+ margin-top: 10pt;
+ padding: 5pt;
+ border-bottom: solid 1pt #999999;
+}
+
+TR.data TH {
+ border-bottom: solid 1pt #999999;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+}
+
+DIV.table TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table CAPTION {
+ caption-side: top;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.table TABLE TD {
+ border: solid thin #cccccc;
+ padding-top: 5pt;
+}
+
+DIV.table TABLE TH {
+ background: #cccccc;
+ border: none;
+ border-bottom: solid thin #999999;
+}
+
+DIV.figure TABLE {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+DIV.figure CAPTION {
+ caption-side: bottom;
+ font-size: 120%;
+ font-style: italic;
+ font-weight: bold;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+TH.label {
+ text-align: right;
+ vertical-align: top;
+}
+
+TH.sublabel {
+ text-align: right;
+ font-weight: normal;
+}
+
+HR {
+ border: solid thin;
+}
+
+SPAN.info {
+ background: black;
+ border: thin solid black;
+ color: white;
+ font-size: 80%;
+ font-style: italic;
+ font-weight: bold;
+ white-space: nowrap;
+}
+
+H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
+ float: right;
+ font-size: 100%;
+}
+
+H2.title, H3.title {
+ border-bottom: solid 2pt #000000;
+}
+
+DIV.indent, TABLE.indent {
+ margin-top: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.indent {
+ border-collapse: collapse;
+}
+
+TABLE.indent TD, TABLE.indent TH {
+ padding: 0;
+}
+
+TABLE.list {
+ border-collapse: collapse;
+ margin-left: auto;
+ margin-right: auto;
+ width: 90%;
+}
+
+TABLE.list TH {
+ background: white;
+ border-bottom: solid thin #cccccc;
+ color: #444444;
+ padding-top: 10pt;
+ padding-left: 5pt;
+ text-align: left;
+ vertical-align: bottom;
+ white-space: nowrap;
+}
+
+TABLE.list TH A {
+ color: #4444cc;
+}
+
+TABLE.list TD {
+ border-bottom: solid thin #eeeeee;
+ padding-top: 5pt;
+ padding-left: 5pt;
+}
+
+TABLE.list TR:nth-child(even) {
+ background: #f8f8f8;
+}
+
+TABLE.list TR:nth-child(odd) {
+ background: #f4f4f4;
+}
+
+DT {
+ margin-left: 36pt;
+ margin-top: 12pt;
+}
+
+DD {
+ margin-left: 54pt;
+}
+
+DL.category DT {
+ font-weight: bold;
+}
+
+P.summary {
+ margin-left: 36pt;
+ font-family: monaco, courier, monospace;
+}
+
+DIV.summary TABLE {
+ border: solid thin #999999;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin: 10px;
+}
+
+DIV.summary TABLE TD, DIV.summary TABLE TH {
+ border: solid thin #999999;
+ padding: 5px;
+ text-align: left;
+ vertical-align: top;
+}
+
+DIV.summary TABLE THEAD TH {
+ background: #eeeeee;
+}
+
+/* API documentation styles... */
+div.body h1 {
+ margin: 0;
+}
+div.body h2 {
+ margin-top: 1.5em;
+}
+div.body h3, div.body h4, div.body h5 {
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+.class, .enumeration, .function, .struct, .typedef, .union {
+ border-bottom: solid thin #999999;
+ margin-bottom: 0;
+ margin-top: 2em;
+}
+.description {
+ margin-top: 0.5em;
+}
+code, p.code, pre, ul.code li {
+ font-family: monaco, courier, monospace;
+ font-size: 90%;
+}
+ul.code, ul.contents, ul.subcontents {
+ list-style-type: none;
+ margin: 0;
+ padding-left: 0;
+}
+ul.code li {
+ margin: 0;
+}
+ul.contents > li {
+ margin-top: 1em;
+}
+ul.contents li ul.code, ul.contents li ul.subcontents {
+ padding-left: 2em;
+}
+div.body dl {
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dt {
+ font-style: italic;
+ margin-left: 0;
+ margin-top: 0;
+}
+div.body dd {
+ margin-bottom: 0.5em;
+}
+
+/* This is just for the HTML files generated with the framedhelp target */
+div.contents {
+ background: #e8e8e8;
+ border: solid thin black;
+ padding: 10px;
+}
+div.contents h1 {
+ font-size: 110%;
+}
+div.contents h2 {
+ font-size: 100%;
+}
+div.contents ul.contents {
+ font-size: 80%;
+}
+div.contents ul.subcontents li {
+ margin-left: 1em;
+ text-indent: -1em;
+}
+--></style>
+</head>
+<body>
+<div class='body'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#CLASSES">Classes</a><ul class="code">
+<li><a href="#ppdcArray" title="// Shared Array">ppdcArray</a></li>
+<li><a href="#ppdcAttr" title="// Attribute">ppdcAttr</a></li>
+<li><a href="#ppdcCatalog" title="// Translation catalog">ppdcCatalog</a></li>
+<li><a href="#ppdcChoice" title="// Option Choice">ppdcChoice</a></li>
+<li><a href="#ppdcConstraint" title="// Constraint">ppdcConstraint</a></li>
+<li><a href="#ppdcDriver" title="// Printer Driver Data">ppdcDriver</a></li>
+<li><a href="#ppdcFile" title="// File">ppdcFile</a></li>
+<li><a href="#ppdcFilter" title="// Filter Program">ppdcFilter</a></li>
+<li><a href="#ppdcFont" title="// Shared Font">ppdcFont</a></li>
+<li><a href="#ppdcGroup" title="// Group of Options">ppdcGroup</a></li>
+<li><a href="#ppdcInteger" title="// Shared integer">ppdcInteger</a></li>
+<li><a href="#ppdcMediaSize" title="// Media Size">ppdcMediaSize</a></li>
+<li><a href="#ppdcMessage" title="// Translation message">ppdcMessage</a></li>
+<li><a href="#ppdcOption" title="// Option">ppdcOption</a></li>
+<li><a href="#ppdcProfile" title="// Color Profile">ppdcProfile</a></li>
+<li><a href="#ppdcShared" title="// Shared Data Value">ppdcShared</a></li>
+<li><a href="#ppdcSource" title="// Source File">ppdcSource</a></li>
+<li><a href="#ppdcString" title="// Shared String">ppdcString</a></li>
+<li><a href="#ppdcVariable" title="// Variable Definition">ppdcVariable</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+ <li><a href="#ppdc_cs_t" title="">ppdc_cs_t</a></li>
+</ul></li>
+<li><a href="#VARIABLES">Variables</a><ul class="code">
+ <li><a href="#ppdcSource" title="// Printer Driver Data">ppdcSource</a></li>
+</ul></li>
+<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
+ <li><a href="#ppdcCondFlags" title="// Condition flags">ppdcCondFlags</a></li>
+ <li><a href="#ppdcDrvType" title="// Driver type">ppdcDrvType</a></li>
+ <li><a href="#ppdcFontStatus" title="// Load status of font">ppdcFontStatus</a></li>
+ <li><a href="#ppdcLineEnding" title="// Line endings">ppdcLineEnding</a></li>
+ <li><a href="#ppdcOptSection" title="// Option section">ppdcOptSection</a></li>
+ <li><a href="#ppdcOptType" title="// Option type">ppdcOptType</a></li>
+</ul></li>
+<h2 class="title"><a name="CLASSES">Classes</a></h2>
+<h3 class="class"><a name="ppdcArray">ppdcArray</a></h3>
+<p class="description">// Shared Array</p>
+<p class="code">class ppdcArray : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int count, alloc, current;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcShared">ppdcShared</a> **data;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>current </dt>
+<dd class="description">Current element</dd>
+<dt>data </dt>
+<dd class="description">Elements</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add(<a href="#ppdcShared">ppdcShared</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+</dl>
+<h4 class="method"><a name="add">add</a></h4>
+<p class="description"></p>
+<p class="code">
+void add (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcShared">ppdcShared</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+</dl>
+<h4 class="method"><a name="first">first</a></h4>
+<p class="description">Return the first element in the array.</p>
+<p class="code">
+<a href="#ppdcShared">ppdcShared</a> *first (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="next">next</a></h4>
+<p class="description">Return the next element in the array.</p>
+<p class="code">
+<a href="#ppdcShared">ppdcShared</a> *next (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="ppdcArray">ppdcArray</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcArray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *a<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>a</dt>
+</dl>
+<h4 class="method"><a name="remove">remove</a></h4>
+<p class="description"></p>
+<p class="code">
+void remove (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcShared">ppdcShared</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+<dd class="description">Data element</dd>
+</dl>
+<h4 class="method"><a name="~ppdcArray">~ppdcArray</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcArray (void);</p>
+<h3 class="class"><a name="ppdcAttr">ppdcAttr</a></h3>
+<p class="description">// Attribute</p>
+<p class="code">class ppdcAttr : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool localizable;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *selector, *text, *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>localizable </dt>
+<dd class="description">Should this attribute be localized?</dd>
+<dt>value </dt>
+<dd class="description">Value string</dd>
+</dl>
+<h4 class="method"><a name="ppdcAttr">ppdcAttr</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcAttr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool loc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name</dd>
+<dt>s</dt>
+<dd class="description">Spec string</dd>
+<dt>t</dt>
+<dd class="description">Human-readable text</dd>
+<dt>v</dt>
+<dd class="description">Value</dd>
+<dt>loc</dt>
+<dd class="description">Localize this attribute?</dd>
+</dl>
+<h4 class="method"><a name="~ppdcAttr">~ppdcAttr</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcAttr (void);</p>
+<h3 class="class"><a name="ppdcCatalog">ppdcCatalog</a></h3>
+<p class="description">// Translation catalog</p>
+<p class="code">class ppdcCatalog : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *locale;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *messages;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>filename </dt>
+<dd class="description">Name of translation file</dd>
+<dt>locale </dt>
+<dd class="description">Name of locale</dd>
+<dt>messages </dt>
+<dd class="description">Array of translation messages</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_message(const char *id,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *string = NULL<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>id</dt>
+<dt>string</dt>
+</dl>
+<h4 class="method"><a name="add_message">add_message</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_message (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *id,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *string<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>id</dt>
+<dd class="description">Message ID to add</dd>
+<dt>string</dt>
+<dd class="description">Translation string</dd>
+</dl>
+<h4 class="method"><a name="find_message">find_message</a></h4>
+<p class="description"></p>
+<p class="code">
+const char *find_message (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *id<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>id</dt>
+<dd class="description">Message ID</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Message text</p>
+<h4 class="method"><a name="load_messages">load_messages</a></h4>
+<p class="description"></p>
+<p class="code">
+int load_messages (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Message catalog file</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on failure</p>
+<h4 class="method"><a name="ppdcCatalog">ppdcCatalog</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcCatalog (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *l,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>l</dt>
+<dd class="description">Locale</dd>
+<dt>f</dt>
+<dd class="description">Message catalog file</dd>
+</dl>
+<h4 class="method"><a name="save_messages">save_messages</a></h4>
+<p class="description"></p>
+<p class="code">
+int save_messages (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to save to</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on error</p>
+<h4 class="method"><a name="~ppdcCatalog">~ppdcCatalog</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcCatalog (void);</p>
+<h3 class="class"><a name="ppdcChoice">ppdcChoice</a></h3>
+<p class="description">// Option Choice</p>
+<p class="code">class ppdcChoice : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text, *code;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>code </dt>
+<dd class="description">PS code of choice</dd>
+</dl>
+<h4 class="method"><a name="ppdcChoice">ppdcChoice</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcChoice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of choice</dd>
+<dt>t</dt>
+<dd class="description">Text of choice</dd>
+<dt>c</dt>
+<dd class="description">Code of choice</dd>
+</dl>
+<h4 class="method"><a name="~ppdcChoice">~ppdcChoice</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcChoice (void);</p>
+<h3 class="class"><a name="ppdcConstraint">ppdcConstraint</a></h3>
+<p class="description">// Constraint</p>
+<p class="code">class ppdcConstraint : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *option1, *choice1, *option2, *choice2;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>choice2 </dt>
+<dd class="description">Second choice</dd>
+</dl>
+<h4 class="method"><a name="ppdcConstraint">ppdcConstraint</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcConstraint (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *o1,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c1,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *o2,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c2<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>o1</dt>
+<dd class="description">First option</dd>
+<dt>c1</dt>
+<dd class="description">First choice</dd>
+<dt>o2</dt>
+<dd class="description">Second option</dd>
+<dt>c2</dt>
+<dd class="description">Second choice</dd>
+</dl>
+<h4 class="method"><a name="~ppdcConstraint">~ppdcConstraint</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcConstraint (void);</p>
+<h3 class="class"><a name="ppdcDriver">ppdcDriver</a></h3>
+<p class="description">// Printer Driver Data</p>
+<p class="code">class ppdcDriver : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *copyright;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *custom_size_code;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *default_font, *default_size;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float left_margin, bottom_margin, right_margin, top_margin, max_width, max_length, min_width, min_length;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *attrs, *constraints, *filters, *fonts, *groups, *profiles, *sizes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int model_number, manual_copies, color_device, throughput;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDrvType">ppdcDrvType</a> type;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int variable_paper_size;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *manufacturer, *model_name, *file_name, *pc_file_name, *version;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>copyright </dt>
+<dd class="description">Copyright strings</dd>
+<dt>custom_size_code </dt>
+<dd class="description">Custom page size code, if any</dd>
+<dt>default_size </dt>
+<dd class="description">Default size option</dd>
+<dt>min_length </dt>
+<dd class="description">Minimum length (points)</dd>
+<dt>sizes </dt>
+<dd class="description">Fixed sizes</dd>
+<dt>throughput </dt>
+<dd class="description">Throughput in pages per minute</dd>
+<dt>type </dt>
+<dd class="description">Driver type</dd>
+<dt>variable_paper_size </dt>
+<dd class="description">Support variable sizes?</dd>
+<dt>version </dt>
+<dd class="description">Version number</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_attr(<a href="#ppdcAttr">ppdcAttr</a> *a<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>a</dt>
+</dl>
+<h4 class="method"><a name="add_constraint">add_constraint</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_constraint (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcConstraint">ppdcConstraint</a> *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+</dl>
+<h4 class="method"><a name="add_copyright">add_copyright</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_copyright (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+</dl>
+<h4 class="method"><a name="add_filter">add_filter</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_filter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFilter">ppdcFilter</a> *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+</dl>
+<h4 class="method"><a name="add_font">add_font</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_font (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFont">ppdcFont</a> *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+</dl>
+<h4 class="method"><a name="add_group">add_group</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_group (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcGroup">ppdcGroup</a> *g<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>g</dt>
+</dl>
+<h4 class="method"><a name="add_profile">add_profile</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_profile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcProfile">ppdcProfile</a> *p<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>p</dt>
+</dl>
+<h4 class="method"><a name="add_size">add_size</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcMediaSize">ppdcMediaSize</a> *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+</dl>
+<h4 class="method"><a name="find_attr">find_attr</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcAttr">ppdcAttr</a> *find_attr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *k,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>k</dt>
+<dd class="description">Keyword string</dd>
+<dt>s</dt>
+<dd class="description">Spec string</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Attribute or NULL</p>
+<h4 class="method"><a name="find_group">find_group</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcGroup">ppdcGroup</a> *find_group (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Group name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Matching group or NULL</p>
+<h4 class="method"><a name="find_option">find_option</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *find_option (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Option name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Matching option or NULL</p>
+<h4 class="method"><a name="ppdcDriver">ppdcDriver</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcDriver (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+<dd class="description">Printer driver template</dd>
+</dl>
+<h4 class="method"><a name="set_custom_size_code">set_custom_size_code</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_custom_size_code (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+<dd class="description">CustomPageSize code</dd>
+</dl>
+<h4 class="method"><a name="set_default_font">set_default_font</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_default_font (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFont">ppdcFont</a> *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Font</dd>
+</dl>
+<h4 class="method"><a name="set_default_size">set_default_size</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_default_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcMediaSize">ppdcMediaSize</a> *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+<dd class="description">Media size</dd>
+</dl>
+<h4 class="method"><a name="set_file_name">set_file_name</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_file_name (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h4 class="method"><a name="set_manufacturer">set_manufacturer</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_manufacturer (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+<dd class="description">Model name</dd>
+</dl>
+<h4 class="method"><a name="set_model_name">set_model_name</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_model_name (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+<dd class="description">Model name</dd>
+</dl>
+<h4 class="method"><a name="set_pc_file_name">set_pc_file_name</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_pc_file_name (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h4 class="method"><a name="set_version">set_version</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_version (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+<dd class="description">Version</dd>
+</dl>
+<h4 class="method"><a name="write_ppd_file">write_ppd_file</a></h4>
+<p class="description"></p>
+<p class="code">
+int write_ppd_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcCatalog">ppdcCatalog</a> *catalog,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *locales,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcSource">ppdcSource</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcLineEnding">ppdcLineEnding</a> le<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">PPD file</dd>
+<dt>catalog</dt>
+<dd class="description">Message catalog</dd>
+<dt>locales</dt>
+<dd class="description">Additional languages to add</dd>
+<dt>src</dt>
+<dd class="description">Driver source</dd>
+<dt>le</dt>
+<dd class="description">Line endings to use</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on failure</p>
+<h4 class="method"><a name="~ppdcDriver">~ppdcDriver</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcDriver (void);</p>
+<h3 class="class"><a name="ppdcFile">ppdcFile</a></h3>
+<p class="description">// File</p>
+<p class="code">class ppdcFile {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *fp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int line;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>filename </dt>
+<dd class="description">Filename</dd>
+<dt>fp </dt>
+<dd class="description">File pointer</dd>
+<dt>line </dt>
+<dd class="description">Line in file</dd>
+</dl>
+<h4 class="method"><a name="get">get</a></h4>
+<p class="description">Get a character from a file.</p>
+<p class="code">
+int get (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="peek">peek</a></h4>
+<p class="description"></p>
+<p class="code">
+int peek (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Next character in file</p>
+<h4 class="method"><a name="ppdcFile">ppdcFile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *ffp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to open</dd>
+<dt>ffp</dt>
+<dd class="description">File pointer to use</dd>
+</dl>
+<h4 class="method"><a name="~ppdcFile">~ppdcFile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcFile (void);</p>
+<h3 class="class"><a name="ppdcFilter">ppdcFilter</a></h3>
+<p class="description">// Filter Program</p>
+<p class="code">class ppdcFilter : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cost;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *mime_type, *program;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>cost </dt>
+<dd class="description">Relative cost of filter</dd>
+<dt>program </dt>
+<dd class="description">Filter program</dd>
+</dl>
+<h4 class="method"><a name="ppdcFilter">ppdcFilter</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *p,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>t</dt>
+<dd class="description">MIME type</dd>
+<dt>p</dt>
+<dd class="description">Filter program</dd>
+<dt>c</dt>
+<dd class="description">Relative cost</dd>
+</dl>
+<h4 class="method"><a name="~ppdcFilter">~ppdcFilter</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcFilter (void);</p>
+<h3 class="class"><a name="ppdcFont">ppdcFont</a></h3>
+<p class="description">// Shared Font</p>
+<p class="code">class ppdcFont : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *encoding, *version, *charset;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFontStatus">ppdcFontStatus</a> status;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>charset </dt>
+<dd class="description">Font charset</dd>
+<dt>status </dt>
+<dd class="description">Font status (ROM or Disk)</dd>
+</dl>
+<h4 class="method"><a name="ppdcFont">ppdcFont</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcFont (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *e,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFontStatus">ppdcFontStatus</a> s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of font</dd>
+<dt>e</dt>
+<dd class="description">Font encoding</dd>
+<dt>v</dt>
+<dd class="description">Font version</dd>
+<dt>c</dt>
+<dd class="description">Font charset</dd>
+<dt>s</dt>
+<dd class="description">Font status</dd>
+</dl>
+<h4 class="method"><a name="~ppdcFont">~ppdcFont</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcFont (void);</p>
+<h3 class="class"><a name="ppdcGroup">ppdcGroup</a></h3>
+<p class="description">// Group of Options</p>
+<p class="code">class ppdcGroup : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *options;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>options </dt>
+<dd class="description">Options</dd>
+<dt>text </dt>
+<dd class="description">Human-readable text of option</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_option(<a href="#ppdcOption">ppdcOption</a> *o<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>o</dt>
+</dl>
+<h4 class="method"><a name="find_option">find_option</a></h4>
+<p class="description">Find an option in a group.</p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *find_option (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of option</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="ppdcGroup">ppdcGroup</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcGroup (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcGroup">ppdcGroup</a> *g<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>g</dt>
+<dd class="description">Group template</dd>
+</dl>
+<h4 class="method"><a name="~ppdcGroup">~ppdcGroup</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcGroup (void);</p>
+<h3 class="class"><a name="ppdcInteger">ppdcInteger</a></h3>
+<p class="description">// Shared integer</p>
+<p class="code">class ppdcInteger : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>value </dt>
+<dd class="description">Integer value</dd>
+</dl>
+<h4 class="method"><a name="ppdcInteger">ppdcInteger</a></h4>
+<p class="description">Integer value</p>
+<p class="code">
+void ppdcInteger (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+</dl>
+<h3 class="class"><a name="ppdcMediaSize">ppdcMediaSize</a></h3>
+<p class="description">// Media Size</p>
+<p class="code">class ppdcMediaSize : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *size_code, *region_code;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float width, length, left, bottom, right, top;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>region_code </dt>
+<dd class="description">PageRegion code, if any</dd>
+<dt>text </dt>
+<dd class="description">Human-readable text</dd>
+<dt>top </dt>
+<dd class="description">Top limit in points</dd>
+</dl>
+<h4 class="method"><a name="ppdcMediaSize">ppdcMediaSize</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcMediaSize (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float w,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float l,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float lm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float bm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float rm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float tm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *sc,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *rc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of media size</dd>
+<dt>t</dt>
+<dd class="description">Text of media size</dd>
+<dt>w</dt>
+<dd class="description">Width in points</dd>
+<dt>l</dt>
+<dd class="description">Length in points</dd>
+<dt>lm</dt>
+<dd class="description">Left margin in points</dd>
+<dt>bm</dt>
+<dd class="description">Bottom margin in points</dd>
+<dt>rm</dt>
+<dd class="description">Right margin in points</dd>
+<dt>tm</dt>
+<dd class="description">Top margin in points</dd>
+<dt>sc</dt>
+<dd class="description">PageSize code, if any</dd>
+<dt>rc</dt>
+<dd class="description">PageRegion code, if any</dd>
+</dl>
+<h4 class="method"><a name="~ppdcMediaSize">~ppdcMediaSize</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcMediaSize (void);</p>
+<h3 class="class"><a name="ppdcMessage">ppdcMessage</a></h3>
+<p class="description">// Translation message</p>
+<p class="code">class ppdcMessage : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *id, *string;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>string </dt>
+<dd class="description">Translation string</dd>
+</dl>
+<h4 class="method"><a name="ppdcMessage">ppdcMessage</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcMessage (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *i,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>i</dt>
+<dd class="description">ID</dd>
+<dt>s</dt>
+<dd class="description">Text</dd>
+</dl>
+<h4 class="method"><a name="~ppdcMessage">~ppdcMessage</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcMessage (void);</p>
+<h3 class="class"><a name="ppdcOption">ppdcOption</a></h3>
+<p class="description">// Option</p>
+<p class="code">class ppdcOption : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *choices;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *defchoice;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float order;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcOptSection">ppdcOptSection</a> section;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcOptType">ppdcOptType</a> type;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>choices </dt>
+<dd class="description">Choices</dd>
+<dt>defchoice </dt>
+<dd class="description">Default choice</dd>
+<dt>order </dt>
+<dd class="description">Order number</dd>
+<dt>section </dt>
+<dd class="description">Section for option code</dd>
+<dt>text </dt>
+<dd class="description">Human-readable text of option</dd>
+<dt>type </dt>
+<dd class="description">Type of option</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_choice(<a href="#ppdcChoice">ppdcChoice</a> *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+</dl>
+<h4 class="method"><a name="find_choice">find_choice</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *find_choice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of choice</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice or NULL</p>
+<h4 class="method"><a name="ppdcOption">ppdcOption</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcOption (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcOption">ppdcOption</a> *o<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>o</dt>
+<dd class="description">Template option</dd>
+</dl>
+<h4 class="method"><a name="set_defchoice">set_defchoice</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_defchoice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcChoice">ppdcChoice</a> *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+<dd class="description">Choice</dd>
+</dl>
+<h4 class="method"><a name="~ppdcOption">~ppdcOption</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcOption (void);</p>
+<h3 class="class"><a name="ppdcProfile">ppdcProfile</a></h3>
+<p class="description">// Color Profile</p>
+<p class="code">class ppdcProfile : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *resolution, *media_type;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float density, gamma, profile[9];<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>media_type </dt>
+<dd class="description">Media type name</dd>
+<dt>profile[9] </dt>
+<dd class="description">Color profile matrix</dd>
+</dl>
+<h4 class="method"><a name="ppdcProfile">ppdcProfile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcProfile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *r,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *m,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float d,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float g,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const float *p<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>r</dt>
+<dd class="description">Resolution name</dd>
+<dt>m</dt>
+<dd class="description">Media type name</dd>
+<dt>d</dt>
+<dd class="description">Density</dd>
+<dt>g</dt>
+<dd class="description">Gamma</dd>
+<dt>p</dt>
+<dd class="description">3x3 transform matrix</dd>
+</dl>
+<h4 class="method"><a name="~ppdcProfile">~ppdcProfile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcProfile (void);</p>
+<h3 class="class"><a name="ppdcShared">ppdcShared</a></h3>
+<p class="description">// Shared Data Value</p>
+<p class="code">class ppdcShared {<br>
+&nbsp;&nbsp;private:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int use;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>use </dt>
+<dd class="description">Use count (delete when 0)</dd>
+</dl>
+<h4 class="method"><a name="class_name">class_name</a></h4>
+<p class="description"></p>
+<p class="code">
+virtual const char *class_name (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="ppdcShared">ppdcShared</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcShared (void);</p>
+<h4 class="method"><a name="release">release</a></h4>
+<p class="description"></p>
+<p class="code">
+void release (void);</p>
+<h4 class="method"><a name="retain">retain</a></h4>
+<p class="description"></p>
+<p class="code">
+void retain (void);</p>
+<h4 class="method"><a name="~ppdcShared">~ppdcShared</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcShared (void);</p>
+<h3 class="class"><a name="ppdcSource">ppdcSource</a></h3>
+<p class="description">// Source File</p>
+<p class="code">class ppdcSource : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cond_state, *cond_current, cond_stack[101];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;static const char *driver_types[];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;static <a href="#ppdcArray">ppdcArray</a> *includes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *base_fonts, *drivers, *po_files, *sizes, *vars;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>cond_stack[101] </dt>
+<dd class="description">#if state stack</dd>
+<dt>driver_types[] </dt>
+<dd class="description">Driver types</dd>
+<dt>filename </dt>
+<dd class="description">Filename</dd>
+<dt>includes </dt>
+<dd class="description">Include directories</dd>
+<dt>vars </dt>
+<dd class="description">Defined variables</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;static void add_include(const char *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+</dl>
+<h4 class="method"><a name="add_include">add_include</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_include (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+<dd class="description">Include directory</dd>
+</dl>
+<h4 class="method"><a name="find_driver">find_driver</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcDriver">ppdcDriver</a> *find_driver (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Driver file name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Driver</p>
+<h4 class="method"><a name="find_include">find_include</a></h4>
+<p class="description"></p>
+<p class="code">
+char *find_include (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *base,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int nlen<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Include filename</dd>
+<dt>base</dt>
+<dd class="description">Current directory</dd>
+<dt>n</dt>
+<dd class="description">Path buffer</dd>
+<dt>nlen</dt>
+<dd class="description">Path buffer length</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Found path or NULL</p>
+<h4 class="method"><a name="find_po">find_po</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcCatalog">ppdcCatalog</a> *find_po (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *l<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>l</dt>
+<dd class="description">Locale name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Message catalog or NULL</p>
+<h4 class="method"><a name="find_size">find_size</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcMediaSize">ppdcMediaSize</a> *find_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>s</dt>
+<dd class="description">Size name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Size</p>
+<h4 class="method"><a name="find_variable">find_variable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcVariable">ppdcVariable</a> *find_variable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Variable name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Variable</p>
+<h4 class="method"><a name="get_attr">get_attr</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcAttr">ppdcAttr</a> *get_attr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool loc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>loc</dt>
+<dd class="description">Localize this attribute?</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Attribute</p>
+<h4 class="method"><a name="get_boolean">get_boolean</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_boolean (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Boolean value</p>
+<h4 class="method"><a name="get_choice">get_choice</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_choice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_color_model">get_color_model</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_color_model (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_color_order">get_color_order</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_color_order (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *co<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>co</dt>
+<dd class="description">Color order string</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Color order value</p>
+<h4 class="method"><a name="get_color_profile">get_color_profile</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcProfile">ppdcProfile</a> *get_color_profile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Color profile</p>
+<h4 class="method"><a name="get_color_space">get_color_space</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_color_space (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *cs<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>cs</dt>
+<dd class="description">Colorspace string</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Colorspace value</p>
+<h4 class="method"><a name="get_constraint">get_constraint</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcConstraint">ppdcConstraint</a> *get_constraint (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Constraint</p>
+<h4 class="method"><a name="get_custom_size">get_custom_size</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcMediaSize">ppdcMediaSize</a> *get_custom_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Media size</p>
+<h4 class="method"><a name="get_duplex">get_duplex</a></h4>
+<p class="description"></p>
+<p class="code">
+void get_duplex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read from</dd>
+<dt>d</dt>
+<dd class="description">Current driver</dd>
+</dl>
+<h4 class="method"><a name="get_filter">get_filter</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcFilter">ppdcFilter</a> *get_filter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Filter</p>
+<h4 class="method"><a name="get_float">get_float</a></h4>
+<p class="description"></p>
+<p class="code">
+float get_float (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Number</p>
+<h4 class="method"><a name="get_font">get_font</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcFont">ppdcFont</a> *get_font (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Font data</p>
+<h4 class="method"><a name="get_generic">get_generic</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_generic (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *keyword,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tattr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *nattr<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>keyword</dt>
+<dd class="description">Keyword name</dd>
+<dt>tattr</dt>
+<dd class="description">Text attribute</dd>
+<dt>nattr</dt>
+<dd class="description">Numeric attribute</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_group">get_group</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcGroup">ppdcGroup</a> *get_group (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>d</dt>
+<dd class="description">Printer driver</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Group</p>
+<h4 class="method"><a name="get_installable">get_installable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *get_installable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Option</p>
+<h4 class="method"><a name="get_integer">get_integer</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_integer (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Integer value</p>
+<h4 class="method"><a name="get_measurement">get_measurement</a></h4>
+<p class="description"></p>
+<p class="code">
+float get_measurement (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Measurement value in points</p>
+<h4 class="method"><a name="get_option">get_option</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *get_option (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcGroup">ppdcGroup</a> *g<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>d</dt>
+<dd class="description">Printer driver</dd>
+<dt>g</dt>
+<dd class="description">Current group</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Option</p>
+<h4 class="method"><a name="get_po">get_po</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcCatalog">ppdcCatalog</a> *get_po (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Message catalog</p>
+<h4 class="method"><a name="get_resolution">get_resolution</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_resolution (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_simple_profile">get_simple_profile</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcProfile">ppdcProfile</a> *get_simple_profile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Color profile</p>
+<h4 class="method"><a name="get_size">get_size</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcMediaSize">ppdcMediaSize</a> *get_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Media size</p>
+<h4 class="method"><a name="get_token">get_token</a></h4>
+<p class="description"></p>
+<p class="code">
+char *get_token (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int buflen<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>buffer</dt>
+<dd class="description">Buffer</dd>
+<dt>buflen</dt>
+<dd class="description">Length of buffer</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Token string or NULL</p>
+<h4 class="method"><a name="get_variable">get_variable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcVariable">ppdcVariable</a> *get_variable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Variable</p>
+<h4 class="method"><a name="import_ppd">import_ppd</a></h4>
+<p class="description"></p>
+<p class="code">
+int import_ppd (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="method"><a name="ppdcSource">ppdcSource</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcSource (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *ffp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to read</dd>
+<dt>ffp</dt>
+<dd class="description">File pointer to use</dd>
+</dl>
+<h4 class="method"><a name="quotef">quotef</a></h4>
+<p class="description"></p>
+<p class="code">
+int quotef (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to write to</dd>
+<dt>format</dt>
+<dd class="description">Printf-style format string</dd>
+<dt>...</dt>
+<dd class="description">Additional args as needed</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Number bytes on success, -1 on failure</p>
+<h4 class="method"><a name="read_file">read_file</a></h4>
+<p class="description"></p>
+<p class="code">
+void read_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *ffp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to read</dd>
+<dt>ffp</dt>
+<dd class="description">File pointer to use</dd>
+</dl>
+<h4 class="method"><a name="scan_file">scan_file</a></h4>
+<p class="description"></p>
+<p class="code">
+void scan_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *td,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool inc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>td</dt>
+<dd class="description">Driver template</dd>
+<dt>inc</dt>
+<dd class="description">Including?</dd>
+</dl>
+<h4 class="method"><a name="set_variable">set_variable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcVariable">ppdcVariable</a> *set_variable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>name</dt>
+<dd class="description">Name</dd>
+<dt>value</dt>
+<dd class="description">Value</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Variable</p>
+<h4 class="method"><a name="write_file">write_file</a></h4>
+<p class="description"></p>
+<p class="code">
+int write_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to write</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on error</p>
+<h4 class="method"><a name="~ppdcSource">~ppdcSource</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcSource (void);</p>
+<h3 class="class"><a name="ppdcString">ppdcString</a></h3>
+<p class="description">// Shared String</p>
+<p class="code">class ppdcString : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>value </dt>
+<dd class="description">String value</dd>
+</dl>
+<h4 class="method"><a name="ppdcString">ppdcString</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+<dd class="description">String</dd>
+</dl>
+<h4 class="method"><a name="~ppdcString">~ppdcString</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcString (void);</p>
+<h3 class="class"><a name="ppdcVariable">ppdcVariable</a></h3>
+<p class="description">// Variable Definition</p>
+<p class="code">class ppdcVariable : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>value </dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void set_value(const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+</dl>
+<h4 class="method"><a name="ppdcVariable">ppdcVariable</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcVariable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of variable</dd>
+<dt>v</dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="method"><a name="set_value">set_value</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_value (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+</dl>
+<h4 class="method"><a name="~ppdcVariable">~ppdcVariable</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcVariable (void);</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="ppdc_cs_t">ppdc_cs_t</a></h3>
+<p class="description"></p>
+<p class="code">
+typedef enum ppdc_cs_t;
+</p>
+<h2 class="title"><a name="VARIABLES">Variables</a></h2>
+<h3 class="variable"><a name="ppdcSource">ppdcSource</a></h3>
+<p class="description">// Printer Driver Data</p>
+<p class="code">class ppdcSource;</p>
+<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
+<h3 class="enumeration"><a name="ppdcCondFlags">ppdcCondFlags</a></h3>
+<p class="description">// Condition flags</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_COND_NORMAL </dt>
+<dd class="description">Normal state</dd>
+<dt>PPDC_COND_SATISFIED </dt>
+<dd class="description">At least one condition satisfied</dd>
+<dt>PPDC_COND_SKIP </dt>
+<dd class="description">Skip state</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcDrvType">ppdcDrvType</a></h3>
+<p class="description">// Driver type</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_DRIVER_CUSTOM </dt>
+<dd class="description">Custom driver</dd>
+<dt>PPDC_DRIVER_EPSON </dt>
+<dd class="description">rastertoepson driver</dd>
+<dt>PPDC_DRIVER_ESCP </dt>
+<dd class="description">rastertoescpx driver</dd>
+<dt>PPDC_DRIVER_HP </dt>
+<dd class="description">rastertohp driver</dd>
+<dt>PPDC_DRIVER_LABEL </dt>
+<dd class="description">rastertolabel/rastertodymo driver</dd>
+<dt>PPDC_DRIVER_MAX </dt>
+<dd class="description">Number of driver types defined</dd>
+<dt>PPDC_DRIVER_PCL </dt>
+<dd class="description">rastertopclx driver</dd>
+<dt>PPDC_DRIVER_PS </dt>
+<dd class="description">PostScript driver</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcFontStatus">ppdcFontStatus</a></h3>
+<p class="description">// Load status of font</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_FONT_DISK </dt>
+<dd class="description">Font is on disk</dd>
+<dt>PPDC_FONT_ROM </dt>
+<dd class="description">Font is in ROM</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcLineEnding">ppdcLineEnding</a></h3>
+<p class="description">// Line endings</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_CRLF </dt>
+<dd class="description">CR + LF</dd>
+<dt>PPDC_CRONLY </dt>
+<dd class="description">CR only</dd>
+<dt>PPDC_LFONLY </dt>
+<dd class="description">LF only</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcOptSection">ppdcOptSection</a></h3>
+<p class="description">// Option section</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_SECTION_ANY </dt>
+<dd class="description">AnySetup</dd>
+<dt>PPDC_SECTION_DOCUMENT </dt>
+<dd class="description">DocumentSetup</dd>
+<dt>PPDC_SECTION_EXIT </dt>
+<dd class="description">ExitServer</dd>
+<dt>PPDC_SECTION_JCL </dt>
+<dd class="description">JCLSetup</dd>
+<dt>PPDC_SECTION_PAGE </dt>
+<dd class="description">PageSetup</dd>
+<dt>PPDC_SECTION_PROLOG </dt>
+<dd class="description">Prolog</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcOptType">ppdcOptType</a></h3>
+<p class="description">// Option type</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_BOOLEAN </dt>
+<dd class="description">True/false option</dd>
+<dt>PPDC_PICKMANY </dt>
+<dd class="description">Multiple choices from list</dd>
+<dt>PPDC_PICKONE </dt>
+<dd class="description">Single choice from list</dd>
+</dl>
+</div>
+</body>
+</html>
diff --git a/doc/help/api-raster.html b/doc/help/api-raster.html
index 103263a48..67d3920de 100644
--- a/doc/help/api-raster.html
+++ b/doc/help/api-raster.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
@@ -391,17 +395,15 @@ page header structure.">cupsRasterWriteHeader2</a></li>
</ul></li>
<li><a href="#TYPES">Data Types</a><ul class="code">
<li><a href="#cups_adv_t" title="AdvanceMedia attribute values">cups_adv_t</a></li>
- <li><a href="#cups_bool_t" title="Types...">cups_bool_t</a></li>
- <li><a href="#cups_cspace_t" title="CutMedia attribute values">cups_cspace_t</a></li>
- <li><a href="#cups_cut_t" title="LeadingEdge attribute values">cups_cut_t</a></li>
- <li><a href="#cups_edge_t" title="Jog attribute values">cups_edge_t</a></li>
+ <li><a href="#cups_bool_t" title="Boolean type">cups_bool_t</a></li>
+ <li><a href="#cups_cspace_t" title="cupsColorSpace attribute values">cups_cspace_t</a></li>
+ <li><a href="#cups_cut_t" title="CutMedia attribute values">cups_cut_t</a></li>
+ <li><a href="#cups_edge_t" title="LeadingEdge attribute values">cups_edge_t</a></li>
<li><a href="#cups_interpret_cb_t" title="cupsRasterInterpretPPD callback function">cups_interpret_cb_t</a></li>
- <li><a href="#cups_jog_t" title="cupsRasterOpen modes">cups_jog_t</a></li>
+ <li><a href="#cups_jog_t" title="Jog attribute values">cups_jog_t</a></li>
<li><a href="#cups_mode_t" title="cupsRasterOpen modes">cups_mode_t</a></li>
<li><a href="#cups_order_t" title="cupsColorOrder attribute values">cups_order_t</a></li>
- <li><a href="#cups_orient_t" title="The page header structure contains the standard PostScript page device
-dictionary, along with some CUPS-specific parameters that are provided
-by the RIPs...">cups_orient_t</a></li>
+ <li><a href="#cups_orient_t" title="Orientation attribute values">cups_orient_t</a></li>
<li><a href="#cups_page_header2_t" title="Version 2 page header ">cups_page_header2_t</a></li>
<li><a href="#cups_page_header_t" title="Version 1 page header ">cups_page_header_t</a></li>
<li><a href="#cups_raster_t" title="Raster stream data">cups_raster_t</a></li>
@@ -412,14 +414,14 @@ by the RIPs...">cups_orient_t</a></li>
</ul></li>
<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
<li><a href="#cups_adv_e" title="AdvanceMedia attribute values">cups_adv_e</a></li>
- <li><a href="#cups_bool_e" title="Types...">cups_bool_e</a></li>
- <li><a href="#cups_cspace_e" title="">cups_cspace_e</a></li>
- <li><a href="#cups_cut_e" title="">cups_cut_e</a></li>
- <li><a href="#cups_edge_e" title="">cups_edge_e</a></li>
- <li><a href="#cups_jog_e" title="">cups_jog_e</a></li>
- <li><a href="#cups_mode_e" title="">cups_mode_e</a></li>
+ <li><a href="#cups_bool_e" title="Boolean type">cups_bool_e</a></li>
+ <li><a href="#cups_cspace_e" title="cupsColorSpace attribute values">cups_cspace_e</a></li>
+ <li><a href="#cups_cut_e" title="CutMedia attribute values">cups_cut_e</a></li>
+ <li><a href="#cups_edge_e" title="LeadingEdge attribute values">cups_edge_e</a></li>
+ <li><a href="#cups_jog_e" title="Jog attribute values">cups_jog_e</a></li>
+ <li><a href="#cups_mode_e" title="cupsRasterOpen modes">cups_mode_e</a></li>
<li><a href="#cups_order_e" title="cupsColorOrder attribute values">cups_order_e</a></li>
- <li><a href="#cups_orient_e" title="">cups_orient_e</a></li>
+ <li><a href="#cups_orient_e" title="Orientation attribute values">cups_orient_e</a></li>
</ul></li>
<!--
"$Id$"
@@ -809,22 +811,22 @@ the line buffer and as the number of bytes to write.</p>
typedef enum <a href="#cups_adv_e">cups_adv_e</a> cups_adv_t;
</p>
<h3 class="typedef"><a name="cups_bool_t">cups_bool_t</a></h3>
-<p class="description">Types...</p>
+<p class="description">Boolean type</p>
<p class="code">
typedef enum <a href="#cups_bool_e">cups_bool_e</a> cups_bool_t;
</p>
<h3 class="typedef"><a name="cups_cspace_t">cups_cspace_t</a></h3>
-<p class="description">CutMedia attribute values</p>
+<p class="description">cupsColorSpace attribute values</p>
<p class="code">
typedef enum <a href="#cups_cspace_e">cups_cspace_e</a> cups_cspace_t;
</p>
<h3 class="typedef"><a name="cups_cut_t">cups_cut_t</a></h3>
-<p class="description">LeadingEdge attribute values</p>
+<p class="description">CutMedia attribute values</p>
<p class="code">
typedef enum <a href="#cups_cut_e">cups_cut_e</a> cups_cut_t;
</p>
<h3 class="typedef"><a name="cups_edge_t">cups_edge_t</a></h3>
-<p class="description">Jog attribute values</p>
+<p class="description">LeadingEdge attribute values</p>
<p class="code">
typedef enum <a href="#cups_edge_e">cups_edge_e</a> cups_edge_t;
</p>
@@ -834,7 +836,7 @@ typedef enum <a href="#cups_edge_e">cups_edge_e</a> cups_edge_t;
typedef int (*cups_interpret_cb_t)(<a href="#cups_page_header2_t">cups_page_header2_t</a> *header, int preferred_bits);
</p>
<h3 class="typedef"><a name="cups_jog_t">cups_jog_t</a></h3>
-<p class="description">cupsRasterOpen modes</p>
+<p class="description">Jog attribute values</p>
<p class="code">
typedef enum <a href="#cups_jog_e">cups_jog_e</a> cups_jog_t;
</p>
@@ -849,9 +851,7 @@ typedef enum <a href="#cups_mode_e">cups_mode_e</a> cups_mode_t;
typedef enum <a href="#cups_order_e">cups_order_e</a> cups_order_t;
</p>
<h3 class="typedef"><a name="cups_orient_t">cups_orient_t</a></h3>
-<p class="description">The page header structure contains the standard PostScript page device
-dictionary, along with some CUPS-specific parameters that are provided
-by the RIPs...</p>
+<p class="description">Orientation attribute values</p>
<p class="code">
typedef enum <a href="#cups_orient_e">cups_orient_e</a> cups_orient_t;
</p>
@@ -1169,7 +1169,7 @@ factor not applied) </dd>
<dd class="description">Advance the roll after this set</dd>
</dl>
<h3 class="enumeration"><a name="cups_bool_e">cups_bool_e</a></h3>
-<p class="description">Types...</p>
+<p class="description">Boolean type</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_FALSE </dt>
@@ -1178,7 +1178,7 @@ factor not applied) </dd>
<dd class="description">Logical true</dd>
</dl>
<h3 class="enumeration"><a name="cups_cspace_e">cups_cspace_e</a></h3>
-<p class="description"></p>
+<p class="description">cupsColorSpace attribute values</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_CSPACE_CIELab <span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span></dt>
@@ -1250,7 +1250,7 @@ light-cyan, light-magenta</dd>
<dd class="description">Yellow, magenta, cyan, black</dd>
</dl>
<h3 class="enumeration"><a name="cups_cut_e">cups_cut_e</a></h3>
-<p class="description"></p>
+<p class="description">CutMedia attribute values</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_CUT_FILE </dt>
@@ -1265,7 +1265,7 @@ light-cyan, light-magenta</dd>
<dd class="description">Cut the roll after this set</dd>
</dl>
<h3 class="enumeration"><a name="cups_edge_e">cups_edge_e</a></h3>
-<p class="description"></p>
+<p class="description">LeadingEdge attribute values</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_EDGE_BOTTOM </dt>
@@ -1278,7 +1278,7 @@ light-cyan, light-magenta</dd>
<dd class="description">Leading edge is the top of the page</dd>
</dl>
<h3 class="enumeration"><a name="cups_jog_e">cups_jog_e</a></h3>
-<p class="description"></p>
+<p class="description">Jog attribute values</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_JOG_FILE </dt>
@@ -1291,7 +1291,7 @@ light-cyan, light-magenta</dd>
<dd class="description">Move pages after this set</dd>
</dl>
<h3 class="enumeration"><a name="cups_mode_e">cups_mode_e</a></h3>
-<p class="description"></p>
+<p class="description">cupsRasterOpen modes</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_RASTER_READ </dt>
@@ -1313,7 +1313,7 @@ light-cyan, light-magenta</dd>
<dd class="description">CCC ... MMM ... YYY ... KKK ...</dd>
</dl>
<h3 class="enumeration"><a name="cups_orient_e">cups_orient_e</a></h3>
-<p class="description"></p>
+<p class="description">Orientation attribute values</p>
<h4 class="constants">Constants</h4>
<dl>
<dt>CUPS_ORIENT_0 </dt>
diff --git a/doc/help/postscript-driver.html b/doc/help/postscript-driver.html
index 7a4579503..adc182816 100644
--- a/doc/help/postscript-driver.html
+++ b/doc/help/postscript-driver.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/help/ppd-compiler.html b/doc/help/ppd-compiler.html
index 134bbf15a..3c29567d8 100644
--- a/doc/help/ppd-compiler.html
+++ b/doc/help/ppd-compiler.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/help/raster-driver.html b/doc/help/raster-driver.html
index 3accf36d7..94aab64c4 100644
--- a/doc/help/raster-driver.html
+++ b/doc/help/raster-driver.html
@@ -27,6 +27,10 @@ PRE.command {
margin-left: 36pt;
}
+P.compact {
+ margin: 0;
+}
+
P.example {
font-style: italic;
margin-left: 36pt;
diff --git a/doc/help/ref-classes-conf.html b/doc/help/ref-classes-conf.html
index d638b4625..7b1e6cacd 100644
--- a/doc/help/ref-classes-conf.html
+++ b/doc/help/ref-classes-conf.html
@@ -155,52 +155,6 @@ This directive cannot be used with <A
HREF="#AllowUser"><CODE>AllowUser</CODE></A></P>
-<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="ErrorPolicy">ErrorPolicy</A></H2>
-
-<H3>Examples</H3>
-
-<PRE CLASS="command">
-&lt;Class name&gt;
- ...
- ErrorPolicy abort-job
-&lt;/Class&gt;
-</PRE>
-
-<H3>Description</H3>
-
-<P>The <CODE>ErrorPolicy</CODE> directive defines the policy that
-is used when a backend is unable to send a print job to the
-printer. The <CODE>lpadmin(8)</CODE> command sets the current
-error policy:</P>
-
-<PRE CLASS="command">
-<KBD>/usr/sbin/lpadmin -p classname -o printer-error-policy=stop-printer</KBD>
-</PRE>
-
-<P>The following values are supported:</P>
-
-<UL>
-
- <LI><CODE>abort-job</CODE> - Abort the job and proceed
- with the next job in the queue</LI>
-
- <LI><CODE>retry-job</CODE> - Retry the job after waiting
- for N seconds; the <VAR>cupsd.conf</VAR> <A
- HREF="ref-cupsd-conf.html#JobRetryInterval"><CODE>JobRetryInterval</CODE></A>
- directive controls the value of N</LI>
-
- <LI><CODE>stop-printer</CODE> - Stop the printer and keep
- the job for future printing; this is the default
- value</LI>
-
-</UL>
-
-<P>This directive must appear inside a <A
-HREF="#Class"><CODE>Class</CODE></A> or <A
-HREF="#DefaultClass"><CODE>DefaultClass</CODE></A>
-section.</P>
-
-
<H2 CLASS="title"><A NAME="Info">Info</A></H2>
<H3>Examples</H3>
diff --git a/driver/Makefile b/driver/Makefile
index a8d41967a..a5c178e19 100644
--- a/driver/Makefile
+++ b/driver/Makefile
@@ -198,7 +198,10 @@ apihelp:
--title "Printer Driver API" \
--css ../doc/cups-printable.css \
--header api-driver.header --intro api-driver.shtml \
+ api-driver.xml \
driver.h $(LIBOBJS:.o=.c) >../doc/help/api-driver.html
+ mxmldoc --tokens help/api-driver.html >../doc/help/api-driver.tokens
+ $(RM) api-driver.xml
framedhelp:
mxmldoc --framed api-driver \
diff --git a/filter/Makefile b/filter/Makefile
index 0f6d69411..2bb7a7f52 100644
--- a/filter/Makefile
+++ b/filter/Makefile
@@ -221,8 +221,11 @@ apihelp:
mxmldoc --section "Programming" --title "Raster API" \
--css ../doc/cups-printable.css \
--header api-raster.header --intro api-raster.shtml \
+ api-raster.xml \
../cups/raster.h interpret.c raster.c \
>../doc/help/api-raster.html
+ mxmldoc --tokens help/api-raster.html api-raster.xml >../doc/help/api-raster.tokens
+ $(RM) api-raster.xml
mxmldoc --section "Programming" \
--title "Developing PostScript Printer Drivers" \
--css ../doc/cups-printable.css \
@@ -268,25 +271,6 @@ framedhelp:
--header raster-driver.header \
--intro raster-driver.shtml
-docsets:
- echo Generating CUPS API documentation sets...
- ../tools/makedocset --docset org.cups.raster.docset \
- --title "Raster API" \
- --header api-raster.header --intro api-raster.shtml \
- ../cups/raster.h interpret.c raster.c
- ../tools/makedocset --docset org.cups.postscript-driver.docset \
- --title "Developing PostScript Printer Drivers" \
- --header postscript-driver.header \
- --intro postscript-driver.shtml
- ../tools/makedocset --docset org.cups.ppd-compiler.docset \
- --title "Introduction to the PPD Compiler" \
- --header ppd-compiler.header \
- --intro ppd-compiler.shtml
- ../tools/makedocset --docset org.cups.raster-driver.docset \
- --title "Developing Raster Printer Drivers" \
- --header raster-driver.header \
- --intro raster-driver.shtml
-
#
# bannertops
diff --git a/filter/bannertops.c b/filter/bannertops.c
index 70342b1ac..4bd8ced9d 100644
--- a/filter/bannertops.c
+++ b/filter/bannertops.c
@@ -589,7 +589,11 @@ write_banner(banner_file_t *banner, /* I - Banner file */
printf("%%%%Page: %s %d\n", i == 1 ? "coverpage" : "coverback", i);
puts("gsave");
- printf("%.1f %.1f translate\n", PageLeft, PageBottom);
+ if (i == 1)
+ printf("%.1f %.1f translate\n", PageLeft, PageBottom);
+ else
+ printf("%.1f %.1f translate\n", PageWidth - PageRight,
+ PageLength - PageRight);
puts("0 setgray");
y = info_top;
diff --git a/locale/cups_ja.po b/locale/cups_ja.po
index 71a529dd8..09d9041db 100644
--- a/locale/cups_ja.po
+++ b/locale/cups_ja.po
@@ -3,7 +3,7 @@
#
# Message catalog template for the Common UNIX Printing System (CUPS).
#
-# Copyright 2007-2008 by Apple Inc.
+# Copyright 2007-2009 by Apple Inc.
# Copyright 2005-2007 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -28,5709 +28,2896 @@
# where "LL" is your locale.
#
msgid ""
-msgstr ""
-"Project-Id-Version: CUPS 1.4\n"
-"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2009-03-23 14:56-0700\n"
-"PO-Revision-Date: 2009-02-20 16:43+0900\n"
-"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
-"Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
+msgstr "Project-Id-Version: CUPS 1.4\nReport-Msgid-Bugs-To: http://www.cups.org/str.php\nPOT-Creation-Date: 2009-03-23 14:56-0700\nPO-Revision-Date: 2009-02-20 16:43+0900\nLast-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\nLanguage-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n"
msgid "\t\t(all)\n"
msgstr "\t\t(すべて)\n"
-
msgid "\t\t(none)\n"
msgstr "\t\t(なし)\n"
-
-#, c-format
msgid "\t%d entries\n"
msgstr "\t%d エントリー\n"
-
msgid "\tAfter fault: continue\n"
msgstr "\t失敗後: 継続\n"
-
msgid "\tAlerts:"
msgstr "\t警告:"
-
msgid "\tBanner required\n"
msgstr "\tバナーが必要\n"
-
msgid "\tCharset sets:\n"
msgstr "\t文字セット:\n"
-
msgid "\tConnection: direct\n"
msgstr "\t接続: 直結\n"
-
msgid "\tConnection: remote\n"
msgstr "\t接続: リモート\n"
-
msgid "\tDefault page size:\n"
msgstr "\tデフォルト用紙サイズ:\n"
-
msgid "\tDefault pitch:\n"
msgstr "\tデフォルトピッチ:\n"
-
msgid "\tDefault port settings:\n"
msgstr "\tデフォルトポート設定:\n"
-
-#, c-format
msgid "\tDescription: %s\n"
msgstr "\t説明: %s\n"
-
-msgid ""
-"\tForm mounted:\n"
-"\tContent types: any\n"
-"\tPrinter types: unknown\n"
-msgstr ""
-"\t設定されたフォーム:\n"
-"\tコンテンツの種類: すべて\n"
-"\tプリンターの種類: 不明\n"
-
+msgid "\tForm mounted:\n\tContent types: any\n\tPrinter types: unknown\n"
+msgstr "\t設定されたフォーム:\n\tコンテンツの種類: すべて\n\tプリンターの種類: 不明\n"
msgid "\tForms allowed:\n"
msgstr "\t許可されているフォーム:\n"
-
-#, c-format
msgid "\tInterface: %s.ppd\n"
msgstr "\tインターフェイス: %s.ppd\n"
-
-#, c-format
msgid "\tInterface: %s/interfaces/%s\n"
msgstr "\tインターフェイス: %s/interfaces/%s\n"
-
-#, c-format
msgid "\tInterface: %s/ppd/%s.ppd\n"
msgstr "\tインターフェイス: %s/ppd/%s.ppd\n"
-
-#, c-format
msgid "\tLocation: %s\n"
msgstr "\t場所: %s\n"
-
msgid "\tOn fault: no alert\n"
msgstr "\t失敗時: 警告なし\n"
-
msgid "\tUsers allowed:\n"
msgstr "\t許可されているユーザー:\n"
-
msgid "\tUsers denied:\n"
msgstr "\t拒否されているユーザー:\n"
-
msgid "\tdaemon present\n"
msgstr "\tデーモンは提供されています\n"
-
msgid "\tno entries\n"
msgstr "\tエントリーがありません\n"
-
-#, c-format
msgid "\tprinter is on device '%s' speed -1\n"
msgstr "\tデバイス '%s' 上のプリンター 速度 -1\n"
-
msgid "\tprinting is disabled\n"
msgstr "\t印刷は無効です\n"
-
msgid "\tprinting is enabled\n"
msgstr "\t印刷は有効です\n"
-
-#, c-format
msgid "\tqueued for %s\n"
msgstr "\t%s にキューしました\n"
-
msgid "\tqueuing is disabled\n"
msgstr "\tキューは無効です\n"
-
msgid "\tqueuing is enabled\n"
msgstr "\tキューは有効です\n"
-
msgid "\treason unknown\n"
msgstr "\t未知の理由\n"
-
-msgid ""
-"\n"
-" DETAILED CONFORMANCE TEST RESULTS\n"
-msgstr ""
-"\n"
-" 適合テスト結果詳細\n"
-
+msgid "\n DETAILED CONFORMANCE TEST RESULTS\n"
+msgstr "\n 適合テスト結果詳細\n"
msgid " REF: Page 15, section 3.1.\n"
msgstr " 参照: 15 ページ、セクション 3.1。\n"
-
msgid " REF: Page 15, section 3.2.\n"
msgstr " 参照: 15 ページ、セクション 3.2。\n"
-
msgid " REF: Page 19, section 3.3.\n"
msgstr " 参照: 19 ページ、セクション 3.3。\n"
-
msgid " REF: Page 20, section 3.4.\n"
msgstr " 参照: 20 ページ、セクション 3.4。\n"
-
msgid " REF: Page 27, section 3.5.\n"
msgstr " 参照: 27 ページ、セクション 3.5。\n"
-
msgid " REF: Page 42, section 5.2.\n"
msgstr " 参照: 42 ページ、セクション 5.2。\n"
-
msgid " REF: Pages 16-17, section 3.2.\n"
msgstr " 参照: 16-17 ページ、セクション 3.2。\n"
-
msgid " REF: Pages 42-45, section 5.2.\n"
msgstr " 参照: 42-45 ページ、セクション 5.2。\n"
-
msgid " REF: Pages 45-46, section 5.2.\n"
msgstr " 参照: 45-46 ページ、セクション 5.2。\n"
-
msgid " REF: Pages 48-49, section 5.2.\n"
msgstr " 参照: 48-49 ページ、セクション 5.2。\n"
-
msgid " REF: Pages 52-54, section 5.2.\n"
msgstr " 参照: 52-54 ページ、セクション 5.2。\n"
-
-#, c-format
msgid " %-39.39s %.0f bytes\n"
msgstr " %-39.39s %.0f バイト\n"
-
-#, c-format
msgid " PASS Default%s\n"
msgstr " 合格 Default%s\n"
-
msgid " PASS DefaultImageableArea\n"
msgstr " 合格 DefaultImageableArea\n"
-
msgid " PASS DefaultPaperDimension\n"
msgstr " 合格 DefaultPaperDimension\n"
-
msgid " PASS FileVersion\n"
msgstr " 合格 FileVersion\n"
-
msgid " PASS FormatVersion\n"
msgstr " 合格 FormatVersion\n"
-
msgid " PASS LanguageEncoding\n"
msgstr " 合格 LanguageEncoding\n"
-
msgid " PASS LanguageVersion\n"
msgstr " 合格 LanguageVersion\n"
-
msgid " PASS Manufacturer\n"
msgstr " 合格 Manufacturer\n"
-
msgid " PASS ModelName\n"
msgstr " 合格 ModelName\n"
-
msgid " PASS NickName\n"
msgstr " 合格 NickName\n"
-
msgid " PASS PCFileName\n"
msgstr " 合格 PCFileName\n"
-
msgid " PASS PSVersion\n"
msgstr " 合格 PSVersion\n"
-
msgid " PASS PageRegion\n"
msgstr " 合格 PageRegion\n"
-
msgid " PASS PageSize\n"
msgstr " 合格 PageSize\n"
-
msgid " PASS Product\n"
msgstr " 合格 Product\n"
-
msgid " PASS ShortNickName\n"
msgstr " 合格 ShortNickName\n"
-
-#, c-format
-msgid ""
-" WARN \"%s %s\" conflicts with \"%s %s\"\n"
-" (constraint=\"%s %s %s %s\")\n"
-msgstr ""
-" 警告 \"%s %s\" は \"%s %s\" と競合します\n"
-" (禁則=\"%s %s %s %s\")\n"
-
-#, c-format
+msgid " WARN \"%s %s\" conflicts with \"%s %s\"\n (constraint=\"%s %s %s %s\")\n"
+msgstr " 警告 \"%s %s\" は \"%s %s\" と競合します\n (禁則=\"%s %s %s %s\")\n"
msgid " WARN %s has no corresponding options!\n"
msgstr " 警告 %s は相当するオプションがありません!\n"
-
-#, c-format
-msgid ""
-" WARN %s shares a common prefix with %s\n"
-" REF: Page 15, section 3.2.\n"
-msgstr ""
-" 警告 %s は %s と一般プレフィックスを共有します。\n"
-" 参照: 15 ページ、セクション 3.2。\n"
-
+msgid " WARN %s shares a common prefix with %s\n REF: Page 15, section 3.2.\n"
+msgstr " 警告 %s は %s と一般プレフィックスを共有します。\n 参照: 15 ページ、セクション 3.2。\n"
msgid " WARN Default choices conflicting!\n"
msgstr " 警告 デフォルトの選択肢が競合しています!\n"
-
-#, c-format
-msgid ""
-" WARN Duplex option keyword %s may not work as expected and should "
-"be named Duplex!\n"
-" REF: Page 122, section 5.17\n"
-msgstr ""
-" 警告 Duplex オプションキーワード %s は期待通りに動作しないかもしれ"
-"ません。また、 Duplex という名前であるべきです!\n"
-" 参照: 122 ページ、セクション 5.17\n"
-
-msgid ""
-" WARN File contains a mix of CR, LF, and CR LF line endings!\n"
-msgstr ""
-" 警告 ファイルが CR、LF、CR LF の行末を混在して含んでいます!\n"
-
-msgid ""
-" WARN LanguageEncoding required by PPD 4.3 spec.\n"
-" REF: Pages 56-57, section 5.3.\n"
-msgstr ""
-" 警告 LanguageEncoding は PPD 4.3 仕様で必須です。\n"
-" 参照: 56-57 ページ、セクション 5.3。\n"
-
-#, c-format
+msgid " WARN Duplex option keyword %s may not work as expected and should be named Duplex!\n REF: Page 122, section 5.17\n"
+msgstr " 警告 Duplex オプションキーワード %s は期待通りに動作しないかもしれません。また、 Duplex という名前であるべきです!\n 参照: 122 ページ、セクション 5.17\n"
+msgid " WARN File contains a mix of CR, LF, and CR LF line endings!\n"
+msgstr " 警告 ファイルが CR、LF、CR LF の行末を混在して含んでいます!\n"
+msgid " WARN LanguageEncoding required by PPD 4.3 spec.\n REF: Pages 56-57, section 5.3.\n"
+msgstr " 警告 LanguageEncoding は PPD 4.3 仕様で必須です。\n 参照: 56-57 ページ、セクション 5.3。\n"
msgid " WARN Line %d only contains whitespace!\n"
msgstr " 警告 %d 行が空白だけです!\n"
-
-msgid ""
-" WARN Manufacturer required by PPD 4.3 spec.\n"
-" REF: Pages 58-59, section 5.3.\n"
-msgstr ""
-" 警告 Manufacturer は PPD 4.3 仕様で必須です。\n"
-" 参照: 58-59 ページ、セクション 5.3。\n"
-
-msgid ""
-" WARN Non-Windows PPD files should use lines ending with only LF, "
-"not CR LF!\n"
-msgstr ""
-" 警告 非 Windows PPD ファイルは、CR LF でなく LF のみを行末に使うべ"
-"きです!\n"
-
-#, c-format
-msgid ""
-" WARN Obsolete PPD version %.1f!\n"
-" REF: Page 42, section 5.2.\n"
-msgstr ""
-" 警告 PPD バージョン %.1f は現在使われていません!\n"
-" 参照: 42 ページ、セクション 5.2。\n"
-
-msgid ""
-" WARN PCFileName longer than 8.3 in violation of PPD spec.\n"
-" REF: Pages 61-62, section 5.3.\n"
-msgstr ""
-" 警告 8.3 文字より長い PCFileName は PPD 仕様違反です。\n"
-" 参照: 61-62 ページ、セクション 5.3。\n"
-
-msgid ""
-" WARN Protocols contains PJL but JCL attributes are not set.\n"
-" REF: Pages 78-79, section 5.7.\n"
-msgstr ""
-" 警告 プロトコルが PJL を含んでいますが JCL 属性が設定されていませ"
-"ん。\n"
-" 参照: 78-79 ページ、セクション 5.7。\n"
-
-msgid ""
-" WARN Protocols contains both PJL and BCP; expected TBCP.\n"
-" REF: Pages 78-79, section 5.7.\n"
-msgstr ""
-" 警告 プロトコルが PJL と BCP の両方を含んでいます; TBCP を想定しま"
-"す。\n"
-" 参照: 78-79 ページ、セクション 5.7。\n"
-
-msgid ""
-" WARN ShortNickName required by PPD 4.3 spec.\n"
-" REF: Pages 64-65, section 5.3.\n"
-msgstr ""
-" 警告 ShortNickName は PPD 4.3 仕様で必須です。\n"
-" 参照: 64-65 ページ、セクション 5.3。\n"
-
-#, c-format
+msgid " WARN Manufacturer required by PPD 4.3 spec.\n REF: Pages 58-59, section 5.3.\n"
+msgstr " 警告 Manufacturer は PPD 4.3 仕様で必須です。\n 参照: 58-59 ページ、セクション 5.3。\n"
+msgid " WARN Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
+msgstr " 警告 非 Windows PPD ファイルは、CR LF でなく LF のみを行末に使うべきです!\n"
+msgid " WARN Obsolete PPD version %.1f!\n REF: Page 42, section 5.2.\n"
+msgstr " 警告 PPD バージョン %.1f は現在使われていません!\n 参照: 42 ページ、セクション 5.2。\n"
+msgid " WARN PCFileName longer than 8.3 in violation of PPD spec.\n REF: Pages 61-62, section 5.3.\n"
+msgstr " 警告 8.3 文字より長い PCFileName は PPD 仕様違反です。\n 参照: 61-62 ページ、セクション 5.3。\n"
+msgid " WARN Protocols contains PJL but JCL attributes are not set.\n REF: Pages 78-79, section 5.7.\n"
+msgstr " 警告 プロトコルが PJL を含んでいますが JCL 属性が設定されていません。\n 参照: 78-79 ページ、セクション 5.7。\n"
+msgid " WARN Protocols contains both PJL and BCP; expected TBCP.\n REF: Pages 78-79, section 5.7.\n"
+msgstr " 警告 プロトコルが PJL と BCP の両方を含んでいます; TBCP を想定します。\n 参照: 78-79 ページ、セクション 5.7。\n"
+msgid " WARN ShortNickName required by PPD 4.3 spec.\n REF: Pages 64-65, section 5.3.\n"
+msgstr " 警告 ShortNickName は PPD 4.3 仕様で必須です。\n 参照: 64-65 ページ、セクション 5.3。\n"
msgid " %s %s %s does not exist!\n"
msgstr " %s %s %s が存在しません!\n"
-
-#, c-format
msgid " %s %s file \"%s\" has the wrong capitalization!\n"
msgstr ""
-
-#, c-format
-msgid ""
-" %s Bad %s choice %s!\n"
-" REF: Page 122, section 5.17\n"
-msgstr ""
-" %s 不正な %s が %s を選んでいます!\n"
-" 参照: 122 ページ、セクション 5.17\n"
-
-#, c-format
+msgid " %s Bad %s choice %s!\n REF: Page 122, section 5.17\n"
+msgstr " %s 不正な %s が %s を選んでいます!\n 参照: 122 ページ、セクション 5.17\n"
msgid " %s Bad UTF-8 \"%s\" translation string for option %s!\n"
msgstr " %s 不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 用)です!\n"
-
-#, c-format
-msgid ""
-" %s Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
-msgstr ""
-" %s 不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 、選択 %s)です!\n"
-
-#, c-format
+msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
+msgstr " %s 不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 、選択 %s)です!\n"
msgid " %s Bad cupsFilter value \"%s\"!\n"
msgstr " %s 不正な値が cupsFilter に設定されています \"%s\"!\n"
-
-#, c-format
msgid " %s Bad cupsICCProfile %s!\n"
msgstr " %s 不正な cupsICCProfile %sです!\n"
-
-#, c-format
msgid " %s Bad cupsPreFilter value \"%s\"!\n"
msgstr " %s 不正な値が cupsPreFilter に設定されています \"%s\"!\n"
-
-#, c-format
msgid " %s Bad cupsUIConstraints %s: \"%s\"!\n"
msgstr " %s 不正な cupsUIConstraints %s: \"%s\"です!\n"
-
-#, c-format
msgid " %s Bad language \"%s\"!\n"
msgstr " %s 無効な言語 \"%s\"です!\n"
-
-#, c-format
msgid " %s Bad spelling of %s - should be %s!\n"
msgstr ""
-
-#, c-format
msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID!\n"
msgstr ""
-
-#, c-format
msgid " %s Empty cupsUIConstraints %s!\n"
msgstr " %s 空の cupsUIConstraints %sです!\n"
-
-#, c-format
msgid " %s Missing \"%s\" translation string for option %s!\n"
msgstr " %s \"%s\" 翻訳文字列 (オプション %s 用) が見つかりません!\n"
-
-#, c-format
msgid " %s Missing \"%s\" translation string for option %s, choice %s!\n"
-msgstr ""
-" %s \"%s\" 翻訳文字列 (オプション %s 、選択 %s) が見つかりません!\n"
-
-#, c-format
+msgstr " %s \"%s\" 翻訳文字列 (オプション %s 、選択 %s) が見つかりません!\n"
msgid " %s Missing APDialogExtension file \"%s\"\n"
msgstr " %s APDialogExtension ファイル \"%s\" が見つかりません\n"
-
-#, c-format
msgid " %s Missing APPrinterIconPath file \"%s\"\n"
msgstr " %s APPrinterIconPath ファイル \"%s\" が見つかりません\n"
-
-#, c-format
msgid " %s Missing APPrinterLowInkTool file \"%s\"\n"
msgstr ""
-
-#, c-format
msgid " %s Missing APPrinterUtilityPath file \"%s\"\n"
msgstr ""
-
-#, c-format
msgid " %s Missing APScanAppPath file \"%s\"\n"
msgstr ""
-
-#, c-format
-msgid ""
-" %s Missing REQUIRED PageRegion option!\n"
-" REF: Page 100, section 5.14.\n"
+msgid " %s Missing REQUIRED PageRegion option!\n REF: Page 100, section 5.14.\n"
msgstr ""
-
-#, c-format
-msgid ""
-" %s Missing REQUIRED PageSize option!\n"
-" REF: Page 99, section 5.14.\n"
+msgid " %s Missing REQUIRED PageSize option!\n REF: Page 99, section 5.14.\n"
msgstr ""
-
-#, c-format
msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr ""
-" %s  選択 *%s %s が UIConstraints \"*%s %s *%s %s\" 内に見つかりませ"
-"ん!\n"
-
-#, c-format
+msgstr " %s  選択 *%s %s が UIConstraints \"*%s %s *%s %s\" 内に見つかりません!\n"
msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr ""
-" %s 選択 *%s %s が cupsUIConstraints %s: \"%s\" 内に見つかりません!\n"
-
-#, c-format
+msgstr " %s 選択 *%s %s が cupsUIConstraints %s: \"%s\" 内に見つかりません!\n"
msgid " %s Missing cupsFilter file \"%s\"\n"
msgstr " %s cupsFilter ファイル \"%s\" が見つかりません!\n"
-
-#, c-format
msgid " %s Missing cupsICCProfile file \"%s\"!\n"
msgstr " %s cupsICCProfile ファイル \"%s\" が見つかりません!\n"
-
-#, c-format
msgid " %s Missing cupsPreFilter file \"%s\"\n"
msgstr " %s cupsPreFilter ファイル \"%s\" が見つかりません!\n"
-
-#, c-format
msgid " %s Missing cupsUIResolver %s!\n"
msgstr " %s cupsUIResolver ファイル %s が見つかりません!\n"
-
-#, c-format
msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr ""
-" %s オプション %s がUIConstraints \"*%s %s *%s %s\" に見つかりません!\n"
-
-#, c-format
+msgstr " %s オプション %s がUIConstraints \"*%s %s *%s %s\" に見つかりません!\n"
msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr ""
-" %s オプション %s がcupsUIConstraints %s に見つかりません!: \"%s\"\n"
-
-#, c-format
+msgstr " %s オプション %s がcupsUIConstraints %s に見つかりません!: \"%s\"\n"
msgid " %s No base translation \"%s\" is included in file!\n"
msgstr " %s ファイルにベース翻訳文字列 \"%s\" がありません!\n"
-
-#, c-format
-msgid ""
-" %s Non-standard size name \"%s\"!\n"
-" REF: Page 187, section B.2.\n"
+msgid " %s Non-standard size name \"%s\"!\n REF: Page 187, section B.2.\n"
msgstr ""
-
-#, c-format
-msgid ""
-" %s REQUIRED %s does not define choice None!\n"
-" REF: Page 122, section 5.17\n"
-msgstr ""
-" %s 必須の %s が選択肢 None を定義していません!\n"
-" 参照: 122 ページ、セクション 5.17\n"
-
-#, c-format
+msgid " %s REQUIRED %s does not define choice None!\n REF: Page 122, section 5.17\n"
+msgstr " %s 必須の %s が選択肢 None を定義していません!\n 参照: 122 ページ、セクション 5.17\n"
msgid " %s Size \"%s\" defined for %s but not for %s!\n"
msgstr ""
-
-#, c-format
msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)!\n"
msgstr ""
-
-#, c-format
msgid " %s cupsICCProfile %s hash value collides with %s!\n"
msgstr " %s cupsICCProfileのハッシュ値 %s が %s と一致しません!\n"
-
-#, c-format
msgid " %s cupsUIResolver %s causes a loop!\n"
msgstr " %s cupsUIResolverの %s がループしています!\n"
-
-#, c-format
-msgid ""
-" %s cupsUIResolver %s does not list at least two different options!\n"
+msgid " %s cupsUIResolver %s does not list at least two different options!\n"
msgstr ""
-
-#, c-format
msgid " **FAIL** %s choice names %s and %s differ only by case!\n"
-msgstr ""
-" **失敗** %s が選択した %s と %s は大文字/小文字のみが違うだけです!\n"
-
-#, c-format
-msgid ""
-" **FAIL** %s must be 1284DeviceID!\n"
-" REF: Page 72, section 5.5\n"
-msgstr ""
-" **失敗** %s は 1284DeviceID でなければなりません!\n"
-" 参照: 72 ページ、セクション 5.5\n"
-
-#, c-format
-msgid ""
-" **FAIL** BAD Default%s %s\n"
-" REF: Page 40, section 4.5.\n"
-msgstr ""
-" **失敗** 不正な Default%s %s\n"
-" 参照: 40 ページ、セクション 4.5。\n"
-
-#, c-format
-msgid ""
-" **FAIL** BAD DefaultImageableArea %s!\n"
-" REF: Page 102, section 5.15.\n"
-msgstr ""
-" **失敗** %s は不正な DefaultImageableArea です!\n"
-" 参照: 102 ページ、セクション 5.15。\n"
-
-#, c-format
-msgid ""
-" **FAIL** BAD DefaultPaperDimension %s!\n"
-" REF: Page 103, section 5.15.\n"
-msgstr ""
-" **失敗** %s は不正な DefaultPaperDimension です!\n"
-" 参照: 103 ページ、セクション 5.15。\n"
-
-msgid ""
-" **FAIL** BAD JobPatchFile attribute in file\n"
-" REF: Page 24, section 3.4.\n"
-msgstr ""
-" **失敗** ファイルに不正な JobPatchFile 属性があります\n"
-" 参照: 24 ページ、セクション 3.4。\n"
-
-msgid ""
-" **FAIL** BAD Manufacturer (should be \"HP\")\n"
-" REF: Page 211, table D.1.\n"
-msgstr ""
-" **失敗** 不正な Manufacturer (\"HP\" でなければなりません)\n"
-" 参照: 211 ページ、表 D.1。\n"
-
-msgid ""
-" **FAIL** BAD Manufacturer (should be \"Oki\")\n"
-" REF: Page 211, table D.1.\n"
-msgstr ""
-" **失敗** 不正な Manufacturer (\"Oki\" でなければなりません)\n"
-" 参照: 211 ページ、表 D.1。\n"
-
-#, c-format
-msgid ""
-" **FAIL** BAD ModelName - \"%c\" not allowed in string.\n"
-" REF: Pages 59-60, section 5.3.\n"
-msgstr ""
-" **失敗** 不正な ModelName - 文字列に \"%c\" は許可されていません。\n"
-" 参照: 59-60 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** BAD PSVersion - not \"(string) int\".\n"
-" REF: Pages 62-64, section 5.3.\n"
-msgstr ""
-" **失敗** 不正な PSVersion - \"(文字列) 整数\" ではありません。\n"
-" 参照: 62-64 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** BAD Product - not \"(string)\".\n"
-" REF: Page 62, section 5.3.\n"
-msgstr ""
-" **失敗** 不正な Product - \"(文字列)\" ではありません。\n"
-" 参照: 62 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** BAD ShortNickName - longer than 31 chars.\n"
-" REF: Pages 64-65, section 5.3.\n"
-msgstr ""
-" **失敗** 不正な ShortNickName - 31 文字を超えています。\n"
-" 参照: 64-65 ページ、セクション 5.3。\n"
-
-#, c-format
-msgid ""
-" **FAIL** Bad %s choice %s!\n"
-" REF: Page 84, section 5.9\n"
-msgstr ""
-" **失敗** 不正な %s が %s を選んでいます!\n"
-" 参照: 84 ページ、セクション 5.9\n"
-
-#, c-format
-msgid ""
-" **FAIL** Bad FileVersion \"%s\"\n"
-" REF: Page 56, section 5.3.\n"
-msgstr ""
-" **失敗** 不正なFileVersion \"%s\"\n"
-" 参照: 56 ページ、セクション 5.3。\n"
-
-#, c-format
-msgid ""
-" **FAIL** Bad FormatVersion \"%s\"\n"
-" REF: Page 56, section 5.3.\n"
-msgstr ""
-" **失敗** FormatVersion が違います \"%s\"\n"
-" 参照: 56 ページ、セクション 5.3。\n"
-
-#, c-format
+msgstr " **失敗** %s が選択した %s と %s は大文字/小文字のみが違うだけです!\n"
+msgid " **FAIL** %s must be 1284DeviceID!\n REF: Page 72, section 5.5\n"
+msgstr " **失敗** %s は 1284DeviceID でなければなりません!\n 参照: 72 ページ、セクション 5.5\n"
+msgid " **FAIL** BAD Default%s %s\n REF: Page 40, section 4.5.\n"
+msgstr " **失敗** 不正な Default%s %s\n 参照: 40 ページ、セクション 4.5。\n"
+msgid " **FAIL** BAD DefaultImageableArea %s!\n REF: Page 102, section 5.15.\n"
+msgstr " **失敗** %s は不正な DefaultImageableArea です!\n 参照: 102 ページ、セクション 5.15。\n"
+msgid " **FAIL** BAD DefaultPaperDimension %s!\n REF: Page 103, section 5.15.\n"
+msgstr " **失敗** %s は不正な DefaultPaperDimension です!\n 参照: 103 ページ、セクション 5.15。\n"
+msgid " **FAIL** BAD JobPatchFile attribute in file\n REF: Page 24, section 3.4.\n"
+msgstr " **失敗** ファイルに不正な JobPatchFile 属性があります\n 参照: 24 ページ、セクション 3.4。\n"
+msgid " **FAIL** BAD Manufacturer (should be \"HP\")\n REF: Page 211, table D.1.\n"
+msgstr " **失敗** 不正な Manufacturer (\"HP\" でなければなりません)\n 参照: 211 ページ、表 D.1。\n"
+msgid " **FAIL** BAD Manufacturer (should be \"Oki\")\n REF: Page 211, table D.1.\n"
+msgstr " **失敗** 不正な Manufacturer (\"Oki\" でなければなりません)\n 参照: 211 ページ、表 D.1。\n"
+msgid " **FAIL** BAD ModelName - \"%c\" not allowed in string.\n REF: Pages 59-60, section 5.3.\n"
+msgstr " **失敗** 不正な ModelName - 文字列に \"%c\" は許可されていません。\n 参照: 59-60 ページ、セクション 5.3。\n"
+msgid " **FAIL** BAD PSVersion - not \"(string) int\".\n REF: Pages 62-64, section 5.3.\n"
+msgstr " **失敗** 不正な PSVersion - \"(文字列) 整数\" ではありません。\n 参照: 62-64 ページ、セクション 5.3。\n"
+msgid " **FAIL** BAD Product - not \"(string)\".\n REF: Page 62, section 5.3.\n"
+msgstr " **失敗** 不正な Product - \"(文字列)\" ではありません。\n 参照: 62 ページ、セクション 5.3。\n"
+msgid " **FAIL** BAD ShortNickName - longer than 31 chars.\n REF: Pages 64-65, section 5.3.\n"
+msgstr " **失敗** 不正な ShortNickName - 31 文字を超えています。\n 参照: 64-65 ページ、セクション 5.3。\n"
+msgid " **FAIL** Bad %s choice %s!\n REF: Page 84, section 5.9\n"
+msgstr " **失敗** 不正な %s が %s を選んでいます!\n 参照: 84 ページ、セクション 5.9\n"
+msgid " **FAIL** Bad FileVersion \"%s\"\n REF: Page 56, section 5.3.\n"
+msgstr " **失敗** 不正なFileVersion \"%s\"\n 参照: 56 ページ、セクション 5.3。\n"
+msgid " **FAIL** Bad FormatVersion \"%s\"\n REF: Page 56, section 5.3.\n"
+msgstr " **失敗** FormatVersion が違います \"%s\"\n 参照: 56 ページ、セクション 5.3。\n"
msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1!\n"
-msgstr ""
-" **失敗** 無効な LanguageEncoding %s - ISOLatin1 でなければなりませ"
-"ん!\n"
-
-#, c-format
+msgstr " **失敗** 無効な LanguageEncoding %s - ISOLatin1 でなければなりません!\n"
msgid " **FAIL** Bad LanguageVersion %s - must be English!\n"
-msgstr ""
-" **失敗** 無効な LanguageVersion %s - English でなければなりません!\n"
-
-#, c-format
+msgstr " **失敗** 無効な LanguageVersion %s - English でなければなりません!\n"
msgid " **FAIL** Default option code cannot be interpreted: %s\n"
msgstr " **失敗** デフォルトのオプションコードが解釈できません: %s\n"
-
-#, c-format
-msgid ""
-" **FAIL** Default translation string for option %s choice %s contains "
-"8-bit characters!\n"
-msgstr ""
-" **失敗** オプション %s、選択 %s のデフォルトの翻訳文字列が 8 ビット文"
-"字を含んでいます!\n"
-
-#, c-format
-msgid ""
-" **FAIL** Default translation string for option %s contains 8-bit "
-"characters!\n"
-msgstr ""
-" **失敗** オプション %s のデフォルトの翻訳文字列が 8 ビット文字を含んで"
-"います!\n"
-
-#, c-format
+msgid " **FAIL** Default translation string for option %s choice %s contains 8-bit characters!\n"
+msgstr " **失敗** オプション %s、選択 %s のデフォルトの翻訳文字列が 8 ビット文字を含んでいます!\n"
+msgid " **FAIL** Default translation string for option %s contains 8-bit characters!\n"
+msgstr " **失敗** オプション %s のデフォルトの翻訳文字列が 8 ビット文字を含んでいます!\n"
msgid " **FAIL** Group names %s and %s differ only by case!\n"
msgstr " **失敗** グループ名 %s と %s は大文字/小文字が違うだけです!\n"
-
-#, c-format
msgid " **FAIL** Multiple occurrences of %s choice name %s!\n"
msgstr " **失敗** %s で複数のオプション %s が選択されています!\n"
-
-#, c-format
msgid " **FAIL** Option names %s and %s differ only by case!\n"
msgstr " **失敗** オプション名 %s と %s は大文字/小文字が違うだけです!\n"
-
-#, c-format
-msgid ""
-" **FAIL** REQUIRED Default%s\n"
-" REF: Page 40, section 4.5.\n"
-msgstr ""
-" **失敗** Default%s は必須\n"
-" 参照: 40 ページ、セクション 4.5。\n"
-
-msgid ""
-" **FAIL** REQUIRED DefaultImageableArea\n"
-" REF: Page 102, section 5.15.\n"
-msgstr ""
-" **失敗** DefaultImageableArea は必須\n"
-" 参照: 102 ページ、セクション 5.15。\n"
-
-msgid ""
-" **FAIL** REQUIRED DefaultPaperDimension\n"
-" REF: Page 103, section 5.15.\n"
-msgstr ""
-" **失敗** DefaultPaperDimension は必須\n"
-" 参照: 103 ページ、セクション 5.15。\n"
-
-msgid ""
-" **FAIL** REQUIRED FileVersion\n"
-" REF: Page 56, section 5.3.\n"
-msgstr ""
-" **失敗** FileVersion は必須\n"
-" 参照: 56 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED FormatVersion\n"
-" REF: Page 56, section 5.3.\n"
-msgstr ""
-" **失敗** FormatVersion は必須\n"
-" 参照: 56 ページ、セクション 5.3。\n"
-
-#, c-format
-msgid ""
-" **FAIL** REQUIRED ImageableArea for PageSize %s\n"
-" REF: Page 41, section 5.\n"
-" REF: Page 102, section 5.15.\n"
-msgstr ""
-" **失敗** PageSize %s に ImageableArea は必須\n"
-" 参照: 41 ページ、セクション 5。\n"
-" 参照: 102 ページ、セクション 5.15。\n"
-
-msgid ""
-" **FAIL** REQUIRED LanguageEncoding\n"
-" REF: Pages 56-57, section 5.3.\n"
-msgstr ""
-" **失敗** LanguageEncoding は必須\n"
-" 参照: 56-57 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED LanguageVersion\n"
-" REF: Pages 57-58, section 5.3.\n"
-msgstr ""
-" **失敗** LanguageVersion は必須\n"
-" 参照: 57-58 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED Manufacturer\n"
-" REF: Pages 58-59, section 5.3.\n"
-msgstr ""
-" **失敗** Manufacturer は必須\n"
-" 参照: 58-59 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED ModelName\n"
-" REF: Pages 59-60, section 5.3.\n"
-msgstr ""
-" **失敗** ModelName は必須\n"
-" 参照: 59-60 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED NickName\n"
-" REF: Page 60, section 5.3.\n"
-msgstr ""
-" **失敗** NickName は必須\n"
-" 参照: 60 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED PCFileName\n"
-" REF: Pages 61-62, section 5.3.\n"
-msgstr ""
-" **失敗** PCFileName は必須\n"
-" 参照: 61-62 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED PSVersion\n"
-" REF: Pages 62-64, section 5.3.\n"
-msgstr ""
-" **失敗** PSVersion は必須\n"
-" 参照: 62-64 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED PageRegion\n"
-" REF: Page 100, section 5.14.\n"
-msgstr ""
-" **失敗** PageRegion は必須\n"
-" 参照: 100 ページ、セクション 5.14。\n"
-
-msgid ""
-" **FAIL** REQUIRED PageSize\n"
-" REF: Page 41, section 5.\n"
-" REF: Page 99, section 5.14.\n"
-msgstr ""
-" **失敗** PageSize は必須\n"
-" 参照: 41 ページ、セクション 5。\n"
-" 参照: 99 ページ、セクション 5.14。\n"
-
-msgid ""
-" **FAIL** REQUIRED PageSize\n"
-" REF: Pages 99-100, section 5.14.\n"
-msgstr ""
-" **失敗** PageSize は必須\n"
-" 参照: 99-100 ページ、セクション 5.14。\n"
-
-#, c-format
-msgid ""
-" **FAIL** REQUIRED PaperDimension for PageSize %s\n"
-" REF: Page 41, section 5.\n"
-" REF: Page 103, section 5.15.\n"
-msgstr ""
-" **失敗** PageSize %s に PaperDimension は必須\n"
-" 参照: 41 ページ、セクション 5。\n"
-" 参照: 103 ページ、セクション 5.15。\n"
-
-msgid ""
-" **FAIL** REQUIRED Product\n"
-" REF: Page 62, section 5.3.\n"
-msgstr ""
-" **失敗** Product は必須\n"
-" 参照: 62 ページ、セクション 5.3。\n"
-
-msgid ""
-" **FAIL** REQUIRED ShortNickName\n"
-" REF: Page 64-65, section 5.3.\n"
-msgstr ""
-" **失敗** ShortNickName は必須\n"
-" 参照: 64-65 ページ、セクション 5.3。\n"
-
-#, c-format
+msgid " **FAIL** REQUIRED Default%s\n REF: Page 40, section 4.5.\n"
+msgstr " **失敗** Default%s は必須\n 参照: 40 ページ、セクション 4.5。\n"
+msgid " **FAIL** REQUIRED DefaultImageableArea\n REF: Page 102, section 5.15.\n"
+msgstr " **失敗** DefaultImageableArea は必須\n 参照: 102 ページ、セクション 5.15。\n"
+msgid " **FAIL** REQUIRED DefaultPaperDimension\n REF: Page 103, section 5.15.\n"
+msgstr " **失敗** DefaultPaperDimension は必須\n 参照: 103 ページ、セクション 5.15。\n"
+msgid " **FAIL** REQUIRED FileVersion\n REF: Page 56, section 5.3.\n"
+msgstr " **失敗** FileVersion は必須\n 参照: 56 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED FormatVersion\n REF: Page 56, section 5.3.\n"
+msgstr " **失敗** FormatVersion は必須\n 参照: 56 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED ImageableArea for PageSize %s\n REF: Page 41, section 5.\n REF: Page 102, section 5.15.\n"
+msgstr " **失敗** PageSize %s に ImageableArea は必須\n 参照: 41 ページ、セクション 5。\n 参照: 102 ページ、セクション 5.15。\n"
+msgid " **FAIL** REQUIRED LanguageEncoding\n REF: Pages 56-57, section 5.3.\n"
+msgstr " **失敗** LanguageEncoding は必須\n 参照: 56-57 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED LanguageVersion\n REF: Pages 57-58, section 5.3.\n"
+msgstr " **失敗** LanguageVersion は必須\n 参照: 57-58 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED Manufacturer\n REF: Pages 58-59, section 5.3.\n"
+msgstr " **失敗** Manufacturer は必須\n 参照: 58-59 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED ModelName\n REF: Pages 59-60, section 5.3.\n"
+msgstr " **失敗** ModelName は必須\n 参照: 59-60 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED NickName\n REF: Page 60, section 5.3.\n"
+msgstr " **失敗** NickName は必須\n 参照: 60 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED PCFileName\n REF: Pages 61-62, section 5.3.\n"
+msgstr " **失敗** PCFileName は必須\n 参照: 61-62 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED PSVersion\n REF: Pages 62-64, section 5.3.\n"
+msgstr " **失敗** PSVersion は必須\n 参照: 62-64 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED PageRegion\n REF: Page 100, section 5.14.\n"
+msgstr " **失敗** PageRegion は必須\n 参照: 100 ページ、セクション 5.14。\n"
+msgid " **FAIL** REQUIRED PageSize\n REF: Page 41, section 5.\n REF: Page 99, section 5.14.\n"
+msgstr " **失敗** PageSize は必須\n 参照: 41 ページ、セクション 5。\n 参照: 99 ページ、セクション 5.14。\n"
+msgid " **FAIL** REQUIRED PageSize\n REF: Pages 99-100, section 5.14.\n"
+msgstr " **失敗** PageSize は必須\n 参照: 99-100 ページ、セクション 5.14。\n"
+msgid " **FAIL** REQUIRED PaperDimension for PageSize %s\n REF: Page 41, section 5.\n REF: Page 103, section 5.15.\n"
+msgstr " **失敗** PageSize %s に PaperDimension は必須\n 参照: 41 ページ、セクション 5。\n 参照: 103 ページ、セクション 5.15。\n"
+msgid " **FAIL** REQUIRED Product\n REF: Page 62, section 5.3.\n"
+msgstr " **失敗** Product は必須\n 参照: 62 ページ、セクション 5.3。\n"
+msgid " **FAIL** REQUIRED ShortNickName\n REF: Page 64-65, section 5.3.\n"
+msgstr " **失敗** ShortNickName は必須\n 参照: 64-65 ページ、セクション 5.3。\n"
msgid " %d ERRORS FOUND\n"
msgstr " %d 個のエラーが見つかりました\n"
-
-#, c-format
-msgid ""
-" Bad %%%%BoundingBox: on line %d!\n"
-" REF: Page 39, %%%%BoundingBox:\n"
-msgstr ""
-" 不正な %%%%BoundingBox: (%d 行)!\n"
-" 参照: 39 ページ、%%%%BoundingBox:\n"
-
-#, c-format
-msgid ""
-" Bad %%%%Page: on line %d!\n"
-" REF: Page 53, %%%%Page:\n"
-msgstr ""
-" 不正な %%%%Page: (%d 行)!\n"
-" 参照: 53 ページ、%%%%Page:\n"
-
-#, c-format
-msgid ""
-" Bad %%%%Pages: on line %d!\n"
-" REF: Page 43, %%%%Pages:\n"
-msgstr ""
-" 不正な %%%%Pages: (%d 行)!\n"
-" 参照: 43 ページ、%%%%Pages:\n"
-
-#, c-format
-msgid ""
-" Line %d is longer than 255 characters (%d)!\n"
-" REF: Page 25, Line Length\n"
-msgstr ""
-" %d 行が 255文字より長くなっています (%d)!\n"
-" 参照: 25 ページ、Line Length\n"
-
-msgid ""
-" Missing %!PS-Adobe-3.0 on first line!\n"
-" REF: Page 17, 3.1 Conforming Documents\n"
-msgstr ""
-" 先頭行に %!PS-Adobe-3.0 がありません!\n"
-" 参照: 17 ページ、3.1 Conforming Documents\n"
-
-#, c-format
-msgid ""
-" Missing %%EndComments comment!\n"
-" REF: Page 41, %%EndComments\n"
-msgstr ""
-" %%EndComments コメントが見つかりません!\n"
-" 参照: 41 ページ、%%EndComments\n"
-
-#, c-format
-msgid ""
-" Missing or bad %%BoundingBox: comment!\n"
-" REF: Page 39, %%BoundingBox:\n"
-msgstr ""
-" %%BoundingBox: コメントが見つからないか不正です!\n"
-" 参照: 39 ページ、%%BoundingBox:\n"
-
-#, c-format
-msgid ""
-" Missing or bad %%Page: comments!\n"
-" REF: Page 53, %%Page:\n"
-msgstr ""
-" %%Page: コメントが見つからないか不正です!\n"
-" 参照: 53 ページ、%%Page:\n"
-
-#, c-format
-msgid ""
-" Missing or bad %%Pages: comment!\n"
-" REF: Page 43, %%Pages:\n"
-msgstr ""
-" %%Pages: コメントが見つからないか不正です!\n"
-" 参照: 43 ページ、%%Pages:\n"
-
+msgid " Bad %%%%BoundingBox: on line %d!\n REF: Page 39, %%%%BoundingBox:\n"
+msgstr " 不正な %%%%BoundingBox: (%d 行)!\n 参照: 39 ページ、%%%%BoundingBox:\n"
+msgid " Bad %%%%Page: on line %d!\n REF: Page 53, %%%%Page:\n"
+msgstr " 不正な %%%%Page: (%d 行)!\n 参照: 53 ページ、%%%%Page:\n"
+msgid " Bad %%%%Pages: on line %d!\n REF: Page 43, %%%%Pages:\n"
+msgstr " 不正な %%%%Pages: (%d 行)!\n 参照: 43 ページ、%%%%Pages:\n"
+msgid " Line %d is longer than 255 characters (%d)!\n REF: Page 25, Line Length\n"
+msgstr " %d 行が 255文字より長くなっています (%d)!\n 参照: 25 ページ、Line Length\n"
+msgid " Missing %!PS-Adobe-3.0 on first line!\n REF: Page 17, 3.1 Conforming Documents\n"
+msgstr " 先頭行に %!PS-Adobe-3.0 がありません!\n 参照: 17 ページ、3.1 Conforming Documents\n"
+msgid " Missing %%EndComments comment!\n REF: Page 41, %%EndComments\n"
+msgstr " %%EndComments コメントが見つかりません!\n 参照: 41 ページ、%%EndComments\n"
+msgid " Missing or bad %%BoundingBox: comment!\n REF: Page 39, %%BoundingBox:\n"
+msgstr " %%BoundingBox: コメントが見つからないか不正です!\n 参照: 39 ページ、%%BoundingBox:\n"
+msgid " Missing or bad %%Page: comments!\n REF: Page 53, %%Page:\n"
+msgstr " %%Page: コメントが見つからないか不正です!\n 参照: 53 ページ、%%Page:\n"
+msgid " Missing or bad %%Pages: comment!\n REF: Page 43, %%Pages:\n"
+msgstr " %%Pages: コメントが見つからないか不正です!\n 参照: 43 ページ、%%Pages:\n"
msgid " NO ERRORS FOUND\n"
msgstr " エラーは見つかりませんでした\n"
-
-#, c-format
msgid " Saw %d lines that exceeded 255 characters!\n"
msgstr " 255文字を超える %d 行が見つかりました!\n"
-
-#, c-format
msgid " Too many %%BeginDocument comments!\n"
msgstr " %%BeginDocument コメントが多すぎます!\n"
-
-#, c-format
msgid " Too many %%EndDocument comments!\n"
msgstr " %%EndDocument コメントが多すぎます!\n"
-
msgid " Warning: file contains binary data!\n"
msgstr " 警告: ファイルにバイナリデータが含まれています!\n"
-
-#, c-format
msgid " Warning: no %%EndComments comment in file!\n"
msgstr " 警告: ファイルに %%EndComments コメントがありません!\n"
-
-#, c-format
msgid " Warning: obsolete DSC version %.1f in file!\n"
msgstr " 警告: ファイルは時代遅れの DSC バージョン %.1f です!\n"
-
msgid " FAIL\n"
msgstr " 失敗\n"
-
-#, c-format
-msgid ""
-" FAIL\n"
-" **FAIL** Unable to open PPD file - %s\n"
-msgstr ""
-" 失敗\n"
-" **失敗** PPD ファイルを開けません - %s\n"
-
-#, c-format
-msgid ""
-" FAIL\n"
-" **FAIL** Unable to open PPD file - %s on line %d.\n"
-msgstr ""
-" 失敗\n"
-" **失敗** PPD ファイルを開けません - %s (%d 行)。\n"
-
+msgid " FAIL\n **FAIL** Unable to open PPD file - %s\n"
+msgstr " 失敗\n **失敗** PPD ファイルを開けません - %s\n"
+msgid " FAIL\n **FAIL** Unable to open PPD file - %s on line %d.\n"
+msgstr " 失敗\n **失敗** PPD ファイルを開けません - %s (%d 行)。\n"
msgid " PASS\n"
msgstr " 合格\n"
-
msgid "#10 Envelope"
msgstr "#10 封筒"
-
msgid "#11 Envelope"
msgstr "#11 封筒"
-
msgid "#12 Envelope"
msgstr "#12 封筒"
-
msgid "#14 Envelope"
msgstr "#14 封筒"
-
msgid "#9 Envelope"
msgstr "#9 封筒"
-
-#, c-format
msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f バイト\n"
-
-#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f バイト\n"
-
-#, c-format
msgid "%.0f x %.0f millimeters"
msgstr "%.0f x %.0f ミリメートル"
-
-#, c-format
msgid "%.0f x %.0f to %.0f x %.0f millimeters"
msgstr "%.0f x %.0f to %.0f x %.0f ミリメートル"
-
-#, c-format
msgid "%.2f x %.2f inches"
msgstr "%.2f x %.2f インチ"
-
-#, c-format
msgid "%.2f x %.2f to %.2f x %.2f inches"
msgstr "%.2f x %.2f to %.2f x %.2f インチ"
-
-#, c-format
msgid "%s accepting requests since %s\n"
msgstr "%s は %s からリクエストを受け付けています\n"
-
-#, c-format
msgid "%s cannot be changed."
msgstr "%s は変更できません。"
-
-#, c-format
msgid "%s is not implemented by the CUPS version of lpc.\n"
msgstr "%s は lpc の CUPS バージョンでは実装されていません。\n"
-
-#, c-format
msgid "%s is not ready\n"
msgstr "%s は準備ができていません\n"
-
-#, c-format
msgid "%s is ready\n"
msgstr "%s は準備ができています\n"
-
-#, c-format
msgid "%s is ready and printing\n"
msgstr "%s は準備ができており印刷しています\n"
-
-#, c-format
-msgid ""
-"%s not accepting requests since %s -\n"
-"\t%s\n"
-msgstr ""
-"%s は %s からリクエストを受け付けていません\n"
-"\t%s\n"
-
-#, c-format
+msgid "%s not accepting requests since %s -\n\t%s\n"
+msgstr "%s は %s からリクエストを受け付けていません\n\t%s\n"
msgid "%s not supported!"
msgstr "%s はサポートされていません!"
-
-#, c-format
msgid "%s/%s accepting requests since %s\n"
msgstr "%s/%s は %s からリクエストを受け付けています\n"
-
-#, c-format
-msgid ""
-"%s/%s not accepting requests since %s -\n"
-"\t%s\n"
-msgstr ""
-"%s/%s は %s からリクエストを受け付けていません\n"
-"\t%s\n"
-
-#, c-format
+msgid "%s/%s not accepting requests since %s -\n\t%s\n"
+msgstr "%s/%s は %s からリクエストを受け付けていません\n\t%s\n"
msgid "%s: %-33.33s [job %d localhost]\n"
msgstr "%s:%-33.33s [ジョブ %d localhost]\n"
-
-#, c-format
msgid "%s: %s failed: %s\n"
msgstr "%s: %s に失敗しました: %s\n"
-
-#, c-format
msgid "%s: Don't know what to do!\n"
msgstr "%s: 何が起きているか不明です!\n"
-
-#, c-format
-msgid ""
-"%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています!\n"
-
-#, c-format
msgid "%s: Error - bad job ID!\n"
msgstr "%s: エラー - 不正なジョブ ID です!\n"
-
-#, c-format
msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
-msgstr ""
-"%s: エラー - ファイルを印刷できず、ジョブを同時に変えることができません!\n"
-
-#, c-format
-msgid ""
-"%s: Error - cannot print from stdin if files or a job ID are provided!\n"
-msgstr ""
-"%s: エラー - ファイルまたはジョブ ID が提供されている場合、標準入力から印刷で"
-"きません。 \n"
-
-#, c-format
+msgstr "%s: エラー - ファイルを印刷できず、ジョブを同時に変えることができません!\n"
+msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "%s: エラー - ファイルまたはジョブ ID が提供されている場合、標準入力から印刷できません。 \n"
msgid "%s: Error - expected character set after '-S' option!\n"
msgstr "%s: エラー - '-S' オプションのあとには文字セットが必要です!\n"
-
-#, c-format
msgid "%s: Error - expected content type after '-T' option!\n"
msgstr "%s: エラー - '-T' オプションのあとにはコンテンツタイプが必要です!\n"
-
-#, c-format
msgid "%s: Error - expected copies after '-n' option!\n"
msgstr "%s: エラー - '-n' オプションのあとにはコピー数が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected copy count after '-#' option!\n"
msgstr "%s: エラー - '-#' オプションのあとにはコピー数が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected destination after '-P' option!\n"
msgstr "%s: エラー - '-P' オプションのあとには宛先が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected destination after '-b' option!\n"
msgstr "%s: エラー - '-b' オプションのあとに宛先が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected destination after '-d' option!\n"
msgstr "%s: エラー - '-d' オプションのあとにはプリンター名が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected form after '-f' option!\n"
msgstr "%s: エラー - '-f' オプションのあとには用紙名が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected hold name after '-H' option!\n"
msgstr "%s: エラー - '-H' オプションのあとにはホールド名が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected hostname after '-H' option!\n"
msgstr "%s: エラー - '-H' オプションのあとにはホスト名が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected hostname after '-h' option!\n"
msgstr "%s: エラー - '-h' オプションのあとにはホスト名が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected mode list after '-y' option!\n"
msgstr "%s: エラー - '-y' オプションのあとにはモードリストが必要です!\n"
-
-#, c-format
msgid "%s: Error - expected name after '-%c' option!\n"
msgstr "%s: エラー - '-%c' オプションのあとには名前が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected option string after '-o' option!\n"
msgstr "%s: エラー - '-o' オプションのあとには文字列が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected page list after '-P' option!\n"
msgstr "%s: エラー - '-P' オプションのあとにはページリストが必要です!\n"
-
-#, c-format
msgid "%s: Error - expected priority after '-%c' option!\n"
msgstr "%s: エラー - '-%c' オプションのあとには優先度が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected reason text after '-r' option!\n"
msgstr "%s: エラー - '-r' のあとには理由のテキストが必要です!\n"
-
-#, c-format
msgid "%s: Error - expected title after '-t' option!\n"
msgstr "%s: エラー - '-t' オプションのあとにはタイトルが必要です!\n"
-
-#, c-format
msgid "%s: Error - expected username after '-U' option!\n"
msgstr "%s: エラー - '-U' オプションのあとにはユーザ名が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected username after '-u' option!\n"
msgstr "%s: エラー - '-u' オプションのあとにはユーザ名が必要です!\n"
-
-#, c-format
msgid "%s: Error - expected value after '-%c' option!\n"
msgstr "%s: エラー - '-%c' オプションのあとには値が必要です!\n"
-
-#, c-format
-msgid ""
-"%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' "
-"option!\n"
-msgstr ""
-"%s: エラー - '-W' オプションのあとには、\"completed\"、\"not-completed\"、"
-"\"all\" のいずれかが必要です!\n"
-
-#, c-format
+msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
+msgstr "%s: エラー - '-W' オプションのあとには、\"completed\"、\"not-completed\"、\"all\" のいずれかが必要です!\n"
msgid "%s: Error - no default destination available.\n"
msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。\n"
-
-#, c-format
msgid "%s: Error - priority must be between 1 and 100.\n"
msgstr "%s: エラー - 優先度は 1 から 100 の間である必要があります。\n"
-
-#, c-format
msgid "%s: Error - scheduler not responding!\n"
msgstr "%s: エラー - スケジューラが応答していません!\n"
-
-#, c-format
msgid "%s: Error - too many files - \"%s\"\n"
msgstr "%s: エラー - ファイルが多すぎます - \"%s\"\n"
-
-#, c-format
msgid "%s: Error - unable to access \"%s\" - %s\n"
msgstr "%s: エラー - \"%s\" にアクセスできません - %s\n"
-
-#, c-format
msgid "%s: Error - unable to queue from stdin - %s\n"
msgstr "%s: エラー - 標準入力からキューにデータを入力できません! - %s\n"
-
-#, c-format
msgid "%s: Error - unknown destination \"%s\"!\n"
msgstr "%s: エラー - \"%s\" は未知の宛先です!\n"
-
-#, c-format
msgid "%s: Error - unknown destination \"%s/%s\"!\n"
msgstr "%s: エラー - \"%s/%s\" は未知の宛先です!\n"
-
-#, c-format
msgid "%s: Error - unknown option '%c'!\n"
msgstr "%s: エラー - '%c' は未知のオプションです!\n"
-
-#, c-format
msgid "%s: Error - unknown option '%s'!\n"
msgstr "%s: エラー - '%s' は未知のオプションです!\n"
-
-#, c-format
msgid "%s: Expected job ID after '-i' option!\n"
msgstr "%s: '-i' オプションのあとにはジョブ ID が必要です!\n"
-
-#, c-format
msgid "%s: Filter \"%s\" not available: %s\n"
msgstr "%s: フィルタ \"%s\" は利用できません: %s\n"
-
-#, c-format
msgid "%s: Invalid destination name in list \"%s\"!\n"
msgstr "%s: リスト \"%s\" に無効な宛先名があります!\n"
-
-#, c-format
msgid "%s: Invalid filter string \"%s\"\n"
msgstr "%s: 無効なフィルタ文字列です \"%s\"\n"
-
-#, c-format
msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
msgstr "%s: '-H restart' の前にはジョブ ID ('-i ジョブID') が必要です!\n"
-
-#, c-format
msgid "%s: No filter to convert from %s/%s to %s/%s!\n"
msgstr "%s: %s/%s から %s/%s に変換するフィルタがありません!\n"
-
-#, c-format
msgid "%s: Operation failed: %s\n"
msgstr "%s: 操作に失敗しました: %s\n"
-
-#, c-format
msgid "%s: Sorry, no encryption support compiled in!\n"
msgstr "%s: すみません、暗号化サポートはコンパイル時に組み込まれていません!\n"
-
-#, c-format
msgid "%s: Unable to connect to server\n"
msgstr "%s: サーバーに接続できません\n"
-
-#, c-format
msgid "%s: Unable to contact server!\n"
msgstr "%s: サーバーに連絡できません!\n"
-
-#, c-format
msgid "%s: Unable to determine MIME type of \"%s\"!\n"
msgstr "%s: \"%s\" の MIME タイプを判別できません!\n"
-
-#, c-format
msgid "%s: Unable to open %s: %s\n"
msgstr "%s: %sを開けません: %s\n"
-
-#, c-format
msgid "%s: Unable to open PPD file: %s on line %d\n"
msgstr "%s: PPD ファイルを開けません: %s の %d 行目\n"
-
-#, c-format
msgid "%s: Unable to open PPD file: %s on line %d.\n"
msgstr ""
-
-#, c-format
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"!\n"
-msgstr ""
-"%s: \"%s\" または \"%s\" から MIME データベースを読み取ることができません!\n"
-
-#, c-format
+msgstr "%s: \"%s\" または \"%s\" から MIME データベースを読み取ることができません!\n"
msgid "%s: Unknown destination \"%s\"!\n"
msgstr "%s: \"%s\" は未知の宛先です!\n"
-
-#, c-format
msgid "%s: Unknown destination MIME type %s/%s!\n"
msgstr "%s: %s/%s は未知の宛先 MIME タイプです!\n"
-
-#, c-format
msgid "%s: Unknown option '%c'!\n"
msgstr "%s: '%c' は未知のオプションです!\n"
-
-#, c-format
msgid "%s: Unknown source MIME type %s/%s!\n"
msgstr "%s: %s/%s は未知のソース MIME タイプです!\n"
-
-#, c-format
-msgid ""
-"%s: Warning - '%c' format modifier not supported - output may not be "
-"correct!\n"
-msgstr ""
-"%s: 警告 - '%c' 形式修飾子はサポートされていません - 出力は正しくないものにな"
-"るかもしれません!\n"
-
-#, c-format
+msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
+msgstr "%s: 警告 - '%c' 形式修飾子はサポートされていません - 出力は正しくないものになるかもしれません!\n"
msgid "%s: Warning - character set option ignored!\n"
msgstr "%s: 警告 - 文字セットオプションは無視されます!\n"
-
-#, c-format
msgid "%s: Warning - content type option ignored!\n"
msgstr "%s: 警告 - コンテンツタイプオプションは無視されます!\n"
-
-#, c-format
msgid "%s: Warning - form option ignored!\n"
msgstr "%s: 警告 - 用紙オプションは無視されます!\n"
-
-#, c-format
msgid "%s: Warning - mode option ignored!\n"
msgstr "%s: 警告 - モードオプションは無視されます!\n"
-
-#, c-format
-msgid ""
-"%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています!\n"
-
-#, c-format
msgid "%s: error - expected option=value after '-o' option!\n"
msgstr "%s: エラー - '-o' オプションのあとには オプション=値 が必要です!\n"
-
-#, c-format
msgid "%s: error - no default destination available.\n"
msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。\n"
-
msgid "-1"
msgstr "-1"
-
msgid "-10"
msgstr "-10"
-
msgid "-100"
msgstr "-100"
-
msgid "-105"
msgstr "-105"
-
msgid "-11"
msgstr "-11"
-
msgid "-110"
msgstr "-110"
-
msgid "-115"
msgstr "-115"
-
msgid "-12"
msgstr "-12"
-
msgid "-120"
msgstr "-120"
-
msgid "-13"
msgstr "-13"
-
msgid "-14"
msgstr "-14"
-
msgid "-15"
msgstr "-15"
-
msgid "-2"
msgstr "-2"
-
msgid "-20"
msgstr "-20"
-
msgid "-25"
msgstr "-25"
-
msgid "-3"
msgstr "-3"
-
msgid "-30"
msgstr "-30"
-
msgid "-35"
msgstr "-35"
-
msgid "-4"
msgstr "-4"
-
msgid "-40"
msgstr "-40"
-
msgid "-45"
msgstr "-45"
-
msgid "-5"
msgstr "-5"
-
msgid "-50"
msgstr "-50"
-
msgid "-55"
msgstr "-55"
-
msgid "-6"
msgstr "-6"
-
msgid "-60"
msgstr "-60"
-
msgid "-65"
msgstr "-65"
-
msgid "-7"
msgstr "-7"
-
msgid "-70"
msgstr "-70"
-
msgid "-75"
msgstr "-75"
-
msgid "-8"
msgstr "-8"
-
msgid "-80"
msgstr "-80"
-
msgid "-85"
msgstr "-85"
-
msgid "-9"
msgstr "-9"
-
msgid "-90"
msgstr "-90"
-
msgid "-95"
msgstr "-95"
-
msgid "0"
msgstr "0"
-
msgid "1"
msgstr "1"
-
msgid "1 inch/sec."
msgstr "1 インチ/秒"
-
msgid "1.25x0.25\""
msgstr "1.25x0.25インチ"
-
msgid "1.25x2.25\""
msgstr "1.25x2.25インチ"
-
msgid "1.5 inch/sec."
msgstr "1.5 インチ/秒"
-
msgid "1.50x0.25\""
msgstr "1.50x0.25インチ"
-
msgid "1.50x0.50\""
msgstr "1.50x0.50インチ"
-
msgid "1.50x1.00\""
msgstr "1.50x1.00インチ"
-
msgid "1.50x2.00\""
msgstr "1.50x2.00インチ"
-
msgid "10"
msgstr "10"
-
msgid "10 inches/sec."
msgstr "10 インチ/秒"
-
msgid "10 x 11\""
msgstr "10 x 11インチ"
-
msgid "10 x 13\""
msgstr "10 x 13インチ"
-
msgid "10 x 14\""
msgstr "10 x 14インチ"
-
msgid "100"
msgstr "100"
-
msgid "100 mm/sec."
msgstr "100 ミリメートル/秒"
-
msgid "105"
msgstr "105"
-
msgid "11"
msgstr "11"
-
msgid "11 inches/sec."
msgstr "11 インチ/秒"
-
msgid "110"
msgstr "110"
-
msgid "115"
msgstr "115"
-
msgid "12"
msgstr "12"
-
msgid "12 inches/sec."
msgstr "12 インチ/秒"
-
msgid "12 x 11\""
msgstr "12 x 11インチ"
-
msgid "120"
msgstr "120"
-
msgid "120 mm/sec."
msgstr "120 ミリメートル/秒"
-
msgid "120x60dpi"
msgstr "120x60dpi"
-
msgid "120x72dpi"
msgstr "120x72dpi"
-
msgid "13"
msgstr "13"
-
msgid "136dpi"
msgstr "136dpi"
-
msgid "14"
msgstr "14"
-
msgid "15"
msgstr "15"
-
msgid "15 mm/sec."
msgstr "15 ミリメートル/秒"
-
msgid "15 x 11\""
msgstr "15 x 11インチ"
-
msgid "150 mm/sec."
msgstr "150 ミリメートル/秒"
-
msgid "150dpi"
msgstr "150dpi"
-
msgid "16"
msgstr "16"
-
msgid "17"
msgstr "17"
-
msgid "18"
msgstr "18"
-
msgid "180dpi"
msgstr "180dpi"
-
msgid "19"
msgstr "19"
-
msgid "2"
msgstr "2"
-
msgid "2 inches/sec."
msgstr "2 インチ/秒"
-
msgid "2-Sided Printing"
msgstr "両面印刷"
-
msgid "2.00x0.37\""
msgstr "2.00x0.37インチ"
-
msgid "2.00x0.50\""
msgstr "2.00x0.50インチ"
-
msgid "2.00x1.00\""
msgstr "2.00x1.00インチ"
-
msgid "2.00x1.25\""
msgstr "2.00x1.25インチ"
-
msgid "2.00x2.00\""
msgstr "2.00x2.00インチ"
-
msgid "2.00x3.00\""
msgstr "2.00x3.00インチ"
-
msgid "2.00x4.00\""
msgstr "2.00x4.00インチ"
-
msgid "2.00x5.50\""
msgstr "2.00x5.50インチ"
-
msgid "2.25x0.50\""
msgstr "2.25x0.50インチ"
-
msgid "2.25x1.25\""
msgstr "2.25x1.25インチ"
-
msgid "2.25x4.00\""
msgstr "2.25x4.00インチ"
-
msgid "2.25x5.50\""
msgstr "2.25x5.50インチ"
-
msgid "2.38x5.50\""
msgstr "2.38x5.50インチ"
-
msgid "2.5 inches/sec."
msgstr "2.5 インチ/秒"
-
msgid "2.50x1.00\""
msgstr "2.50x1.00インチ"
-
msgid "2.50x2.00\""
msgstr "2.50x2.00インチ"
-
msgid "2.75x1.25\""
msgstr "2.75x1.25インチ"
-
msgid "2.9 x 1\""
msgstr "2.9 x 1インチ"
-
msgid "20"
msgstr "20"
-
msgid "20 mm/sec."
msgstr "20 ミリメートル/秒"
-
msgid "200 mm/sec."
msgstr "200 ミリメートル/秒"
-
msgid "203dpi"
msgstr "203dpi"
-
msgid "21"
msgstr "21"
-
msgid "22"
msgstr "22"
-
msgid "23"
msgstr "23"
-
msgid "24"
msgstr "24"
-
msgid "24-Pin Series"
msgstr "24ピンシリーズ"
-
msgid "240x72dpi"
msgstr "240x72dpi"
-
msgid "25"
msgstr "25"
-
msgid "250 mm/sec."
msgstr "250 ミリメートル/秒"
-
msgid "26"
msgstr "26"
-
msgid "27"
msgstr "27"
-
msgid "28"
msgstr "28"
-
msgid "29"
msgstr "29"
-
msgid "3"
msgstr "3"
-
msgid "3 inches/sec."
msgstr "3 インチ/秒"
-
msgid "3.00x1.00\""
msgstr "3.00x1.00インチ"
-
msgid "3.00x1.25\""
msgstr "3.00x1.25インチ"
-
msgid "3.00x2.00\""
msgstr "3.00x2.00インチ"
-
msgid "3.00x3.00\""
msgstr "3.00x3.00インチ"
-
msgid "3.00x5.00\""
msgstr "3.00x5.00インチ"
-
msgid "3.25x2.00\""
msgstr "3.25x2.00インチ"
-
msgid "3.25x5.00\""
msgstr "3.25x5.00インチ"
-
msgid "3.25x5.50\""
msgstr "3.25x5.50インチ"
-
msgid "3.25x5.83\""
msgstr "3.25x5.83インチ"
-
msgid "3.25x7.83\""
msgstr "3.25x7.83インチ"
-
msgid "3.5\" Disk"
msgstr "3.5 インチDisk"
-
msgid "3.5\" Disk - 2 1/8 x 2 3/4\""
msgstr "3.5インチ Disk - 2 1/8 x 2 3/4インチ"
-
msgid "3.50x1.00\""
msgstr "3.50x1.00インチ"
-
msgid "30"
msgstr "30"
-
msgid "30 mm/sec."
msgstr "30 ミリメートル/秒"
-
msgid "300 mm/sec."
msgstr "300 ミリメートル/秒"
-
msgid "300dpi"
msgstr "300dpi"
-
msgid "35"
msgstr "35"
-
msgid "360dpi"
msgstr "360dpi"
-
msgid "360x180dpi"
msgstr "360x180dpi"
-
msgid "4"
msgstr "4"
-
msgid "4 inches/sec."
msgstr "4 インチ/秒"
-
msgid "4.00x1.00\""
msgstr "4.00x1.00インチ"
-
msgid "4.00x13.00\""
msgstr "4.00x13.00インチ"
-
msgid "4.00x2.00\""
msgstr "4.00x2.00インチ"
-
msgid "4.00x2.50\""
msgstr "4.00x2.50インチ"
-
msgid "4.00x3.00\""
msgstr "4.00x3.00インチ"
-
msgid "4.00x4.00\""
msgstr "4.00x4.00インチ"
-
msgid "4.00x5.00\""
msgstr "4.00x5.00インチ"
-
msgid "4.00x6.00\""
msgstr "4.00x6.00インチ"
-
msgid "4.00x6.50\""
msgstr "4.00x6.50インチ"
-
msgid "40"
msgstr "40"
-
msgid "40 mm/sec."
msgstr "40 ミリメートル/秒"
-
msgid "45"
msgstr "45"
-
msgid "5"
msgstr "5"
-
msgid "5 inches/sec."
msgstr "5 インチ/秒"
-
msgid "50"
msgstr "50"
-
msgid "55"
msgstr "55"
-
msgid "6"
msgstr "6"
-
msgid "6 inches/sec."
msgstr "6 インチ/秒"
-
msgid "6.00x1.00\""
msgstr "6.00x1.00\""
-
msgid "6.00x2.00\""
msgstr "6.00x2.00\""
-
msgid "6.00x3.00\""
msgstr "6.00x3.00\""
-
msgid "6.00x4.00\""
msgstr "6.00x4.00\""
-
msgid "6.00x5.00\""
msgstr "6.00x5.00\""
-
msgid "6.00x6.00\""
msgstr "6.00x6.00\""
-
msgid "6.00x6.50\""
msgstr "6.00x6.50\""
-
msgid "60"
msgstr "60"
-
msgid "60 mm/sec."
msgstr "60 mm/秒"
-
msgid "600 DPI Grayscale"
msgstr "600 DPI グレースケール"
-
msgid "600dpi"
msgstr "600dpi"
-
msgid "60dpi"
msgstr "60dpi"
-
msgid "60x720dpi"
msgstr "60x720dpi"
-
msgid "65"
msgstr "65"
-
msgid "7"
msgstr "7"
-
msgid "7 inches/sec."
msgstr "7 インチ/秒"
-
msgid "7 x 9\""
msgstr "7 x 9\""
-
msgid "70"
msgstr "70"
-
msgid "720dpi"
msgstr "720dpi"
-
msgid "75"
msgstr "75"
-
msgid "8"
msgstr "8"
-
msgid "8 inches/sec."
msgstr "8 インチ/秒"
-
msgid "8 x 10\""
msgstr "8 x 10\""
-
msgid "8.00x1.00\""
msgstr "8.00x1.00\""
-
msgid "8.00x2.00\""
msgstr "8.00x2.00\""
-
msgid "8.00x3.00\""
msgstr "8.00x3.00\""
-
msgid "8.00x4.00\""
msgstr "8.00x4.00\""
-
msgid "8.00x5.00\""
msgstr "8.00x5.00\""
-
msgid "8.00x6.00\""
msgstr "8.00x6.00\""
-
msgid "8.00x6.50\""
msgstr "8.00x6.50\""
-
msgid "80"
msgstr "80"
-
msgid "80 mm/sec."
msgstr "80 mm/秒"
-
msgid "85"
msgstr "85"
-
msgid "9"
msgstr "9"
-
msgid "9 inches/sec."
msgstr "9 インチ/秒"
-
msgid "9 x 11\""
msgstr "9 x 11\""
-
msgid "9 x 12\""
msgstr "9 x 12\""
-
msgid "9-Pin Series"
msgstr "9-Pin Series"
-
msgid "90"
msgstr "90"
-
msgid "95"
msgstr "95"
-
msgid "?Invalid help command unknown\n"
msgstr "?無効なヘルプコマンドです\n"
-
msgid "A Samba password is required to export printer drivers!"
-msgstr ""
-"プリンタードライバーをエクスポートするには Samba のパスワードが必要です!"
-
+msgstr "プリンタードライバーをエクスポートするには Samba のパスワードが必要です!"
msgid "A Samba username is required to export printer drivers!"
-msgstr ""
-"プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です!"
-
-#, c-format
+msgstr "プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です!"
msgid "A class named \"%s\" already exists!"
msgstr "\"%s\" という名前のクラスはすでに存在します!"
-
-#, c-format
msgid "A printer named \"%s\" already exists!"
msgstr "\"%s\" という名前のプリンターはすでに存在します!"
-
msgid "A0"
msgstr "A0"
-
msgid "A1"
msgstr "A1"
-
msgid "A10"
msgstr "A10"
-
msgid "A2"
msgstr "A2"
-
msgid "A3"
msgstr "A3"
-
msgid "A3 (Oversize)"
msgstr "A3 (特大)"
-
msgid "A4"
msgstr "A4"
-
msgid "A4 (Oversize)"
msgstr "A4 (特大)"
-
msgid "A4 (Small)"
msgstr "A4 (小)"
-
msgid "A5"
msgstr "A5"
-
msgid "A5 (Oversize)"
msgstr "A5 (特大)"
-
msgid "A6"
msgstr "A6"
-
msgid "A7"
msgstr "A7"
-
msgid "A8"
msgstr "A8"
-
msgid "A9"
msgstr "A9"
-
msgid "ANSI A"
msgstr "ANSI A"
-
msgid "ANSI B"
msgstr "ANSI B"
-
msgid "ANSI C"
msgstr "ANSI C"
-
msgid "ANSI D"
msgstr "ANSI D"
-
msgid "ANSI E"
msgstr "ANSI E"
-
msgid "ARCH A"
msgstr "ARCH A"
-
msgid "ARCH B"
msgstr "ARCH B"
-
msgid "ARCH C"
msgstr "ARCH C"
-
msgid "ARCH D"
msgstr "ARCH D"
-
msgid "ARCH E"
msgstr "ARCH E"
-
msgid "Accept Jobs"
msgstr "ジョブの受け付け"
-
msgid "Accepted"
msgstr "受け付けました"
-
msgid "Add Class"
msgstr "クラスの追加"
-
msgid "Add Printer"
msgstr "プリンターの追加"
-
msgid "Add RSS Subscription"
msgstr "RSS 購読を追加"
-
msgid "Address"
msgstr "アドレス"
-
msgid "Address - 1 1/8 x 3 1/2\""
msgstr "アドレス - 1 1/8 x 3 1/2\""
-
msgid "Administration"
msgstr "管理"
-
msgid "Always"
msgstr "常に有効"
-
msgid "AppSocket/HP JetDirect"
msgstr "AppSocket/HP JetDirect"
-
msgid "Applicator"
msgstr "アプリケーター"
-
-#, c-format
msgid "Attempt to set %s printer-state to bad value %d!"
msgstr "%s printer-state に 不正な値 %d を設定しようとしています!"
-
-#, c-format
msgid "Attribute groups are out of order (%x < %x)!"
msgstr "属性グループは範囲外です (%x < %x)!"
-
msgid "B0"
msgstr "B0"
-
msgid "B1"
msgstr "B1"
-
msgid "B10"
msgstr "B10"
-
msgid "B2"
msgstr "B2"
-
msgid "B3"
msgstr "B3"
-
msgid "B4"
msgstr "B4"
-
msgid "B5"
msgstr "B5"
-
msgid "B6"
msgstr "B6"
-
msgid "B7"
msgstr "B7"
-
msgid "B8"
msgstr "B8"
-
msgid "B9"
msgstr "B9"
-
msgid "Bad NULL dests pointer"
msgstr "不正な NULL 送信先ポインター"
-
msgid "Bad OpenGroup"
msgstr "不正な OpenGroup"
-
msgid "Bad OpenUI/JCLOpenUI"
msgstr "不正な OpenUI/JCLOpenUI"
-
msgid "Bad OrderDependency"
msgstr "不正な OrderDependency"
-
msgid "Bad Request"
msgstr "不正なリクエスト"
-
msgid "Bad SNMP version number"
msgstr "不正な SNMP バージョン番号"
-
msgid "Bad UIConstraints"
msgstr "不正な UIConstraints"
-
-#, c-format
msgid "Bad copies value %d."
msgstr "%d は不正なコピー値です。"
-
msgid "Bad custom parameter"
msgstr "不正なカスタムパラメーター"
-
-#, c-format
msgid "Bad device URI \"%s\"!\n"
msgstr "\"%s\" は無効なデバイス URI です!\n"
-
-#, c-format
msgid "Bad device-uri \"%s\"!"
msgstr "\"%s\" は無効な device-uri です!"
-
-#, c-format
msgid "Bad device-uri scheme \"%s\"!"
msgstr "\"%s\" は無効な device-uri スキーマです!"
-
-#, c-format
msgid "Bad document-format \"%s\"!"
msgstr "\"%s\" は不正な document-format です!"
-
msgid "Bad filename buffer!"
msgstr "不正なファイル名バッファーです!"
-
-#, c-format
msgid "Bad font attribute: %s\n"
msgstr "不正なフォント属性: %s\n"
-
msgid "Bad job-priority value!"
msgstr "不正な job-priority 値です!"
-
-#, c-format
msgid "Bad job-sheets value \"%s\"!"
msgstr "\"%s\" は不正な job-sheets 値です!"
-
msgid "Bad job-sheets value type!"
msgstr "不正な job-sheets 値タイプ です!"
-
msgid "Bad job-state value!"
msgstr "不正な job-state 値です!"
-
-#, c-format
msgid "Bad job-uri attribute \"%s\"!"
msgstr "\"%s\" は無効な job-uri 属性です!"
-
-#, c-format
msgid "Bad notify-pull-method \"%s\"!"
msgstr "\"%s\" は無効な notify-pull-method です!"
-
-#, c-format
msgid "Bad notify-recipient-uri URI \"%s\"!"
msgstr "URI \"%s\" は不正な notify-recipient-uri です!"
-
-#, c-format
msgid "Bad number-up value %d."
msgstr "%d は不正な number-up 値です。"
-
-#, c-format
msgid "Bad option + choice on line %d!"
msgstr "%d 行に不正なオプションと選択があります!"
-
-#, c-format
msgid "Bad page-ranges values %d-%d."
msgstr "%d-%d は不正な page-ranges 値です。"
-
-#, c-format
msgid "Bad port-monitor \"%s\"!"
msgstr "\"%s\" は無効な port-monitor です!"
-
-#, c-format
msgid "Bad printer-state value %d!"
msgstr "%d は無効な printer-state 値です!"
-
-#, c-format
msgid "Bad request ID %d!"
msgstr ""
-
-#, c-format
msgid "Bad request version number %d.%d!"
msgstr "バージョン番号 %d.%d は無効なリクエストです!"
-
msgid "Bad subscription ID!"
msgstr "不正なサブスクリプション ID です!"
-
msgid "Banners"
msgstr "バナー"
-
msgid "Billing Information: "
msgstr "課金情報: "
-
msgid "Bond Paper"
msgstr "ボンド紙"
-
msgid "C0 Envelope"
-msgstr "C0 Envelope"
-
+msgstr "C0 封筒"
msgid "C1 Envelope"
-msgstr "C1 Envelope"
-
+msgstr "C1 封筒"
msgid "C2 Envelope"
-msgstr "C2 Envelope"
-
+msgstr "C2 封筒"
msgid "C3 Envelope"
-msgstr "C3 Envelope"
-
+msgstr "C3 封筒"
msgid "C4"
msgstr "C4"
-
msgid "C4 Envelope"
-msgstr "C4 Envelope"
-
+msgstr "C4 封筒"
msgid "C5"
msgstr "C5"
-
msgid "C5 Envelope"
-msgstr "C5 Envelope"
-
+msgstr "C5 封筒"
msgid "C6"
msgstr "C6"
-
msgid "C6 Envelope"
-msgstr "C6 Envelope"
-
+msgstr "C6 封筒"
msgid "C65 Envelope"
-msgstr "C65 Envelope"
-
+msgstr "C65 封筒"
msgid "C7 Envelope"
-msgstr "C7 Envelope"
-
+msgstr "C7 封筒"
msgid "CMYK"
msgstr "CMYK"
-
msgid "CPCL Label Printer"
-msgstr "CPCL Label Printer"
-
+msgstr "CPCL ラベルプリンタ"
msgid "Cancel RSS Subscription"
msgstr "RSS 購読をキャンセル"
-
msgid "Change Settings"
msgstr "設定の変更"
-
-#, c-format
msgid "Character set \"%s\" not supported!"
msgstr "文字セット \"%s\" はサポートされていません!"
-
msgid "Chou3 Envelope"
msgstr "封筒 長形3号"
-
msgid "Chou4 Envelope"
msgstr "封筒 長形4号"
-
msgid "Classes"
msgstr "クラス"
-
msgid "Clean Print Heads"
msgstr "プリントヘッドクリーニング"
-
msgid "Color"
msgstr "カラー"
-
msgid "Color Mode"
msgstr "カラーモード"
-
-msgid ""
-"Commands may be abbreviated. Commands are:\n"
-"\n"
-"exit help quit status ?\n"
-msgstr ""
-"コマンドは短縮できます。 コマンド:\n"
-"\n"
-"exit help quit status ?\n"
-
+msgid "Commands may be abbreviated. Commands are:\n\nexit help quit status ?\n"
+msgstr "コマンドは短縮できます。 コマンド:\n\nexit help quit status ?\n"
msgid "Community name uses indefinite length"
msgstr "コミュニティ名の長さが不定"
-
msgid "Continue"
msgstr "継続"
-
msgid "Continuous"
msgstr "連続"
-
-#, c-format
msgid "Could not scan type \"%s\"!"
msgstr "タイプ \"%s\" を検査できませんでした!"
-
msgid "Cover open."
msgstr "カバーが開いています。"
-
msgid "Created"
msgstr "ジョブ作成"
-
msgid "Created On: "
msgstr "ジョブ作成日: "
-
msgid "Custom"
msgstr "カスタム"
-
msgid "CustominCutInterval"
msgstr "CustominCutInterval"
-
msgid "CustominTearInterval"
msgstr "CustominTearInterval"
-
msgid "Cut"
msgstr "カット"
-
msgid "Cutter"
msgstr "カッター"
-
msgid "DL"
msgstr "DL"
-
msgid "DL Envelope"
-msgstr "DL Envelope"
-
+msgstr "DL 封筒"
msgid "Dark"
msgstr "濃い"
-
msgid "Darkness"
msgstr "濃さ"
-
msgid "Delete Class"
msgstr "クラスの削除"
-
msgid "Delete Printer"
msgstr "プリンターの削除"
-
msgid "Description: "
msgstr "説明: "
-
msgid "DeskJet Series"
msgstr "DeskJet Series"
-
-#, c-format
msgid "Destination \"%s\" is not accepting jobs."
msgstr "宛先 \"%s\" はジョブを受け付けていません。"
-
msgid "Developer almost empty."
msgstr "現像剤が無くなりかけています。"
-
msgid "Developer empty!"
msgstr "現像剤が無くなりました!"
-
-#, c-format
-msgid ""
-"Device: uri = %s\n"
-" class = %s\n"
-" info = %s\n"
-" make-and-model = %s\n"
-" device-id = %s\n"
-" location = %s\n"
-msgstr ""
-"デバイス: uri = %s\n"
-" class = %s\n"
-" info = %s\n"
-" make-and-model = %s\n"
-" device-id = %s\n"
-" location = %s\n"
-
+msgid "Device: uri = %s\n class = %s\n info = %s\n make-and-model = %s\n device-id = %s\n location = %s\n"
+msgstr "デバイス: uri = %s\n class = %s\n info = %s\n make-and-model = %s\n device-id = %s\n location = %s\n"
msgid "Direct Thermal Media"
msgstr "感熱紙"
-
msgid "Disabled"
msgstr "無効"
-
-#, c-format
msgid "Document %d not found in job %d."
msgstr "ドキュメント %d がジョブ %d に見つかりません。"
-
msgid "Door open."
msgstr "ドアが開いています。"
-
msgid "Double Postcard"
msgstr "往復はがき"
-
msgid "Driver Name: "
msgstr "ドライバー名: "
-
msgid "Driver Version: "
msgstr "ドライバーバージョン: "
-
msgid "Duplexer"
msgstr "両面オプション"
-
msgid "Dymo"
msgstr "Dymo"
-
-#, c-format
msgid "EMERG: Unable to allocate memory for page info: %s\n"
msgstr "EMERG: ページ情報のメモリー割り当てができません: %s\n"
-
-#, c-format
msgid "EMERG: Unable to allocate memory for pages array: %s\n"
msgstr "EMERG: ページアレイのメモリー割り当てができません: %s\n"
-
msgid "EPL1 Label Printer"
-msgstr "EPL1 Label Printer"
-
+msgstr "EPL1 ラベルプリンタ"
msgid "EPL2 Label Printer"
-msgstr "EPL2 Label Printer"
-
-#, c-format
+msgstr "EPL2 ラベルプリンタ"
msgid "ERROR: %s job-id user title copies options [file]\n"
msgstr ""
-
-#, c-format
msgid "ERROR: Bad %%BoundingBox: comment seen!\n"
msgstr "ERROR: 不正な %%BoundingBox: コメントがあります!\n"
-
-#, c-format
msgid "ERROR: Bad %%IncludeFeature: comment!\n"
msgstr "ERROR: 不正な %%IncludeFeature: コメントです!\n"
-
-#, c-format
msgid "ERROR: Bad %%Page: comment in file!\n"
msgstr "ERROR: 不正な %%Page: コメントがファイルにあります!\n"
-
-#, c-format
msgid "ERROR: Bad %%PageBoundingBox: comment in file!\n"
msgstr "ERROR: 不正な %%PageBoundingBox: コメントがファイルにあります!\n"
-
-#, c-format
msgid "ERROR: Bad SCSI device file \"%s\"!\n"
msgstr "ERROR: 不正な SCSI デバイスファイル \"%s\" です!\n"
-
-#, c-format
msgid "ERROR: Bad charset file %s\n"
msgstr "ERROR: 不正な charset ファイル %s です\n"
-
-#, c-format
msgid "ERROR: Bad charset type %s\n"
msgstr "ERROR: 不正な charset タイプ %s です\n"
-
-#, c-format
msgid "ERROR: Bad columns value %d!\n"
msgstr "ERROR: 不正な columns 値 %d です!\n"
-
-#, c-format
msgid "ERROR: Bad cpi value %f!\n"
msgstr "ERROR: 不正な cpi 値 %f です!\n"
-
-#, c-format
msgid "ERROR: Bad font description line: %s\n"
msgstr "ERROR: 不正なフォント記述行: %s\n"
-
-#, c-format
msgid "ERROR: Bad lpi value %f!\n"
msgstr "ERROR: 不正な lpi 値 %f です!\n"
-
msgid "ERROR: Bad page setup!\n"
msgstr "ERROR: 不正なページ設定です!\n"
-
-#, c-format
msgid "ERROR: Bad text direction %s\n"
msgstr "ERROR: 不正な テキスト方向 %s です\n"
-
-#, c-format
msgid "ERROR: Bad text width %s\n"
msgstr "ERROR: 不正な テキスト幅 %s です\n"
-
msgid "ERROR: Destination printer does not exist!\n"
msgstr "ERROR: 送信先のプリンターが存在しません!\n"
-
-#, c-format
msgid "ERROR: Duplicate %%BoundingBox: comment seen!\n"
msgstr "ERROR: 重複した %%BoundingBox: コメントがあります!\n"
-
-#, c-format
msgid "ERROR: Duplicate %%Pages: comment seen!\n"
msgstr "ERROR: 重複した %%Pages: コメントがあります!\n"
-
msgid "ERROR: Empty print file!\n"
msgstr "ERROR: 空のプリントファイルです!\n"
-
-#, c-format
msgid "ERROR: Error %d sending PAPSendData request: %s\n"
msgstr "ERROR: エラー %d PAPSendData request の送信: %s\n"
-
-#, c-format
msgid "ERROR: Expected quoted string on line %d of %s!\n"
msgstr "ERROR: %d 行: %s には引用符で囲まれた文字列が必要です!\n"
-
msgid "ERROR: Fatal USB error!\n"
msgstr "ERROR: 致命的な USB エラーです!\n"
-
msgid "ERROR: Invalid HP-GL/2 command seen, unable to print file!\n"
msgstr "ERROR: 無効な HP-GL/2 コマンドがあり、ファイルをプリントできません!\n"
-
-#, c-format
msgid "ERROR: Missing %%EndProlog!\n"
msgstr "ERROR: %%EndProlog が見つかりません!\n"
-
-#, c-format
msgid "ERROR: Missing %%EndSetup!\n"
msgstr "ERROR: %%EndSetup が見つかりません!\n"
-
-msgid ""
-"ERROR: Missing device URI on command-line and no DEVICE_URI environment "
-"variable!\n"
-msgstr ""
-"ERROR: コマンドラインにデバイス URI が見つからず、環境変数 DEVICE_URI も見つ"
-"かりません!\n"
-
-#, c-format
+msgid "ERROR: Missing device URI on command-line and no DEVICE_URI environment variable!\n"
+msgstr "ERROR: コマンドラインにデバイス URI が見つからず、環境変数 DEVICE_URI も見つかりません!\n"
msgid "ERROR: Missing value on line %d of banner file!\n"
msgstr "ERROR: バナーファイルの %d 行目に値が見つかりません!\n"
-
-#, c-format
-msgid ""
-"ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
+msgid "ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
msgstr "ERROR: %d 行: %s の翻訳文字列の前に msgid 行が必要です!\n"
-
-#, c-format
msgid "ERROR: No %%BoundingBox: comment in header!\n"
msgstr "ERROR: %%BoundingBox: コメントがありません!\n"
-
-#, c-format
msgid "ERROR: No %%Pages: comment in header!\n"
msgstr "ERROR: %%Pages: コメントがヘッダーにありません!\n"
-
-msgid ""
-"ERROR: No device URI found in argv[0] or in DEVICE_URI environment "
-"variable!\n"
-msgstr ""
-"ERROR: argv[0] または 環境変数 DEVICE_URI にデバイス URI が見つかりません!\n"
-
-#, c-format
+msgid "ERROR: No device URI found in argv[0] or in DEVICE_URI environment variable!\n"
+msgstr "ERROR: argv[0] または 環境変数 DEVICE_URI にデバイス URI が見つかりません!\n"
msgid "ERROR: No fonts in charset file %s\n"
msgstr "ERROR: charset ファイル %s にフォントが見つかりません\n"
-
msgid "ERROR: No pages found!\n"
msgstr "ERROR: ページが見つかりません!\n"
-
msgid "ERROR: Out of paper!\n"
msgstr "ERROR: 用紙切れです!\n"
-
msgid "ERROR: PRINTER environment variable not defined!\n"
msgstr "ERROR: PRINTER 環境変数が定義されていません!\n"
-
-#, c-format
msgid "ERROR: Print file was not accepted (%s)!\n"
msgstr "ERROR: プリントファイルが受け付けられませんでした (%s)!\n"
-
msgid "ERROR: Printer not responding\n"
msgstr "ERROR: プリンターが応答していません\n"
-
msgid "ERROR: Printer not responding!\n"
msgstr "ERROR: プリンターが応答していません!\n"
-
msgid "ERROR: Printer sent unexpected EOF\n"
msgstr "ERROR: プリンターが 想定外の EOF を送信しました\n"
-
-#, c-format
msgid "ERROR: Remote host did not accept control file (%d)\n"
-msgstr ""
-"ERROR: リモートホストがコントロールファイルを受け付けませんでした (%d)\n"
-
-#, c-format
+msgstr "ERROR: リモートホストがコントロールファイルを受け付けませんでした (%d)\n"
msgid "ERROR: Remote host did not accept data file (%d)\n"
msgstr "ERROR: リモートホストがデータファイルを受け付けませんでした (%d)\n"
-
msgid "ERROR: There was a timeout error while sending data to the printer\n"
msgstr "ERROR: プリンターへのデータ送信中にタイムアウトエラーが発生しました\n"
-
-#, c-format
msgid "ERROR: Unable to add file %d to job: %s\n"
msgstr "ERROR: ファイル %d をジョブに追加できません: %s\n"
-
-#, c-format
msgid "ERROR: Unable to cancel job %d: %s\n"
msgstr "ERROR: ジョブ %d をキャンセルできません: %s\n"
-
msgid "ERROR: Unable to copy PDF file"
msgstr "ERROR: PDF ファイルをコピーできません"
-
msgid "ERROR: Unable to create socket"
msgstr "ERROR: ソケットを作成できません"
-
-#, c-format
msgid "ERROR: Unable to create temporary compressed print file: %s\n"
msgstr "ERROR: テンポラリーの圧縮プリントファイルを作成できません: %s\n"
-
msgid "ERROR: Unable to create temporary file"
msgstr "ERROR: テンポラリーファイルを作成できません"
-
-#, c-format
msgid "ERROR: Unable to exec pictwpstops: %s\n"
msgstr "ERROR: pictwpstops を実行できません: %s\n"
-
msgid "ERROR: Unable to execute gs program"
msgstr "ERROR: gs プログラムを実行できません"
-
msgid "ERROR: Unable to execute pdftops program"
msgstr "ERROR: pdftops プログラムを実行できません"
-
-#, c-format
msgid "ERROR: Unable to fork pictwpstops: %s\n"
msgstr "ERROR: pictwpstops をフォークできません: %s\n"
-
msgid "ERROR: Unable to get PAP request"
msgstr "ERROR: PAP リクエストを取得できません"
-
msgid "ERROR: Unable to get PAP response"
msgstr "ERROR: PAP レスポンスを取得できません"
-
-#, c-format
msgid "ERROR: Unable to get PPD file for printer \"%s\" - %s.\n"
msgstr "ERROR: プリンター \"%s\" の PPD ファイルを取得できません - %s\n"
-
msgid "ERROR: Unable to get default AppleTalk zone"
msgstr "ERROR: デフォルトの AppleTalk ゾーンを取得できません"
-
-#, c-format
msgid "ERROR: Unable to get job %d attributes (%s)!\n"
msgstr "ERROR: ジョブ %d の属性 (%s) を取得できません!\n"
-
-#, c-format
msgid "ERROR: Unable to get printer status (%s)!\n"
msgstr "ERROR: プリンターのステータス (%s) を取得できません!\n"
-
-#, c-format
msgid "ERROR: Unable to locate printer '%s'!\n"
msgstr "ERROR: プリンター '%s' が見つかりません\"!\n"
-
msgid "ERROR: Unable to look for PAP response"
msgstr "ERROR: PAP レスポンスが見つかりません"
-
msgid "ERROR: Unable to lookup AppleTalk printers"
msgstr "ERROR: AppleTalk プリンターが見つかりません"
-
msgid "ERROR: Unable to make AppleTalk address"
msgstr "ERROR: AppleTalk アドレスを作成できません"
-
-#, c-format
msgid "ERROR: Unable to open \"%s\" - %s\n"
msgstr "ERROR: \"%s\" を開けません - %s\n"
-
-#, c-format
msgid "ERROR: Unable to open %s: %s\n"
msgstr "ERROR: %s を開けません: %s\n"
-
msgid "ERROR: Unable to open PPD file!\n"
msgstr ""
-
-#, c-format
msgid "ERROR: Unable to open banner file \"%s\" - %s\n"
msgstr "ERROR: バナーファイル \"%s\" を開けません - %s\n"
-
-#, c-format
msgid "ERROR: Unable to open device file \"%s\": %s\n"
msgstr "ERROR: デバイスファイル \"%s\" を開けません: %s\n"
-
-#, c-format
msgid "ERROR: Unable to open file \"%s\" - %s\n"
msgstr "ERROR: ファイル \"%s\" を開けません - %s\n"
-
-#, c-format
msgid "ERROR: Unable to open file \"%s\": %s\n"
msgstr "ERROR: ファイル \"%s\" を開けません: %s\n"
-
msgid "ERROR: Unable to open image file for printing!\n"
msgstr "ERROR: 印刷のためのイメージファイルを開けません!\n"
-
-#, c-format
msgid "ERROR: Unable to open print file \"%s\": %s\n"
msgstr "ERROR: プリントファイル \"%s\" を開けません: %s\n"
-
-#, c-format
msgid "ERROR: Unable to open print file %s - %s\n"
msgstr "ERROR: プリントファイル %s を開けません - %s\n"
-
-#, c-format
msgid "ERROR: Unable to open print file %s: %s\n"
msgstr "ERROR: プリントファイル %s を開けません: %s\n"
-
-#, c-format
msgid "ERROR: Unable to open raster file - %s\n"
msgstr ""
-
-#, c-format
msgid "ERROR: Unable to open temporary compressed print file: %s\n"
msgstr "ERROR: テンポラリーの圧縮プリントファイルを開けません: %s\n"
-
-#, c-format
msgid "ERROR: Unable to print %d text columns!\n"
msgstr "ERROR: テキストカラム %d をプリントできません!\n"
-
-#, c-format
msgid "ERROR: Unable to print %dx%d text page!\n"
msgstr "ERROR: テキストページ %dx%d をプリントできません!\n"
-
msgid "ERROR: Unable to read print data"
msgstr "ERROR: プリントデータを読み込めません"
-
msgid "ERROR: Unable to read print data!\n"
msgstr "ERROR: プリントデータを読み込めません!\n"
-
msgid "ERROR: Unable to reserve port"
msgstr "ERROR: ポートを予約できません"
-
-#, c-format
msgid "ERROR: Unable to seek to offset %ld in file - %s\n"
msgstr "ERROR: ファイルでのオフセット %ld へシークできません - %s\n"
-
-#, c-format
msgid "ERROR: Unable to seek to offset %lld in file - %s\n"
msgstr "ERROR: ファイルでのオフセット %lld へシークできません - %s\n"
-
msgid "ERROR: Unable to send LPD command"
msgstr "ERROR: LPD コマンドを送信できません"
-
msgid "ERROR: Unable to send PAP tickle request"
msgstr "ERROR: PAP tickle 要求を送信できません"
-
msgid "ERROR: Unable to send initial PAP send data request"
msgstr "ERROR: PAP の初期データ送信要求を送信できません"
-
-#, c-format
msgid "ERROR: Unable to send print data (%d)\n"
msgstr "ERROR: プリントデータを送信できません (%d)\n"
-
msgid "ERROR: Unable to send print data!\n"
msgstr "ERROR: プリントデータを送信できません!\n"
-
msgid "ERROR: Unable to send print file to printer"
msgstr "ERROR: プリントファイルをプリンターへ送信できません"
-
msgid "ERROR: Unable to send trailing nul to printer"
msgstr "ERROR: 最後の NUL をプリンターへ送信できません"
-
-#, c-format
msgid "ERROR: Unable to wait for pictwpstops: %s\n"
msgstr "ERROR: pictwpstops を待つことができません: %s\n"
-
-#, c-format
msgid "ERROR: Unable to write %d bytes to \"%s\": %s\n"
msgstr "ERROR: %d バイトを \"%s\" に書き込めません: %s\n"
-
-#, c-format
msgid "ERROR: Unable to write %d bytes to printer!\n"
msgstr "ERROR: %d バイトをプリンターに書き込めません!\n"
-
msgid "ERROR: Unable to write control file"
msgstr "ERROR: コントロールファイルを書き込めません"
-
msgid "ERROR: Unable to write print data"
msgstr "ERROR: プリントデータを書き込めません"
-
-#, c-format
msgid "ERROR: Unable to write print data: %s\n"
msgstr "ERROR: プリントデータを書き込めません: %s\n"
-
msgid "ERROR: Unable to write raster data to driver!\n"
msgstr "ERROR: ラスターデータをドライバーへ書き込めません!\n"
-
msgid "ERROR: Unable to write to temporary file"
msgstr "ERROR: テンポラリーファイルへ書き込めません"
-
-#, c-format
msgid "ERROR: Unable to write uncompressed document data: %s\n"
msgstr "ERROR: 非圧縮ドキュメントデータを書き込めません: %s\n"
-
-#, c-format
msgid "ERROR: Unexpected text on line %d of %s!\n"
msgstr "ERROR: %d 行: %s は予期せぬテキストです!\n"
-
-#, c-format
msgid "ERROR: Unknown encryption option value \"%s\"!\n"
msgstr "ERROR: \"%s\" は未知の暗号オプション値です!\n"
-
-#, c-format
msgid "ERROR: Unknown file order \"%s\"\n"
msgstr "ERROR: \"%s\" は未知のファイルオーダーです\n"
-
-#, c-format
msgid "ERROR: Unknown format character \"%c\"\n"
msgstr "ERROR: \"%c\" は未知の書式文字です\n"
-
-#, c-format
msgid "ERROR: Unknown message catalog format for \"%s\"!\n"
msgstr "ERROR: \"%s\" は未知のメッセージカタログの書式です!\n"
-
-#, c-format
msgid "ERROR: Unknown option \"%s\" with value \"%s\"!\n"
msgstr "ERROR: \"%s\" (値 \"%s\") は未知のオプションです!\n"
-
-#, c-format
msgid "ERROR: Unknown print mode \"%s\"\n"
msgstr "ERROR: \"%s\" は未知のプリントモードです\n"
-
-#, c-format
msgid "ERROR: Unknown version option value \"%s\"!\n"
msgstr "ERROR: \"%s\" は未知のバージョンオプション値です!\n"
-
-#, c-format
msgid "ERROR: Unsupported brightness value %s, using brightness=100!\n"
-msgstr ""
-"ERROR: %s はサポートされていない輝度値です。brightness=100 を使用します!\n"
-
-#, c-format
+msgstr "ERROR: %s はサポートされていない輝度値です。brightness=100 を使用します!\n"
msgid "ERROR: Unsupported gamma value %s, using gamma=1000!\n"
-msgstr ""
-"ERROR: %s はサポートされていないガンマ値です。gamma=1000 を使用します!\n"
-
-#, c-format
+msgstr "ERROR: %s はサポートされていないガンマ値です。gamma=1000 を使用します!\n"
msgid "ERROR: Unsupported number-up value %d, using number-up=1!\n"
-msgstr ""
-"ERROR: %d はサポートされていない number-up 値です。number-up=1 を使用しま"
-"す!\n"
-
-#, c-format
-msgid ""
-"ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
-msgstr ""
-"ERROR: %s はサポートされていない number-up-layout 値です。number-up-"
-"layout=lrtb を使用します!\n"
-
-#, c-format
+msgstr "ERROR: %d はサポートされていない number-up 値です。number-up=1 を使用します!\n"
+msgid "ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
+msgstr "ERROR: %s はサポートされていない number-up-layout 値です。number-up-layout=lrtb を使用します!\n"
msgid "ERROR: Unsupported page-border value %s, using page-border=none!\n"
-msgstr ""
-"ERROR: %s はサポートされていない page-border 値です。page-border=none を使用"
-"します!\n"
-
-#, c-format
+msgstr "ERROR: %s はサポートされていない page-border 値です。page-border=none を使用します!\n"
msgid "ERROR: doc_printf overflow (%d bytes) detected, aborting!\n"
-msgstr ""
-"ERROR: doc_printf オーバーフロー (%d バイト) が検出され、中断しました!\n"
-
-#, c-format
+msgstr "ERROR: doc_printf オーバーフロー (%d バイト) が検出され、中断しました!\n"
msgid "ERROR: pdftops filter crashed on signal %d!\n"
msgstr "ERROR: pdftops フィルターはシグナル %d で異常終了しました!\n"
-
-#, c-format
msgid "ERROR: pdftops filter exited with status %d!\n"
msgstr "ERROR: pdftops フィルターは状態 %d で終了しました!\n"
-
-#, c-format
msgid "ERROR: pictwpstops exited on signal %d!\n"
msgstr "ERROR: pictwpstops はシグナル %d で終了しました!\n"
-
-#, c-format
msgid "ERROR: pictwpstops exited with status %d!\n"
msgstr "ERROR: pictwpstops は状態 %d で終了しました!\n"
-
-msgid ""
-"ERROR: recoverable: Unable to connect to printer; will retry in 30 "
-"seconds...\n"
-msgstr ""
-"ERROR: 回復可能: プリンターに接続できません。30 秒後に再試行します...\n"
-
+msgid "ERROR: recoverable: Unable to connect to printer; will retry in 30 seconds...\n"
+msgstr "ERROR: 回復可能: プリンターに接続できません。30 秒後に再試行します...\n"
msgid "ERROR: select() failed"
msgstr "ERROR: select() が失敗しました"
-
msgid "ERROR: unable to stat print file"
msgstr "ERROR: プリントファイルの状態を取得できません"
-
msgid "Edit Configuration File"
msgstr "設定ファイルの編集"
-
msgid "Empty PPD file!"
msgstr "PPD ファイルが空です!"
-
msgid "Ending Banner"
msgstr "終了バナー"
-
msgid "Enter old password:"
msgstr "古いパスワードを入力:"
-
msgid "Enter password again:"
msgstr "パスワードを再度入力:"
-
msgid "Enter password:"
msgstr "パスワードを入力:"
-
-msgid ""
-"Enter your username and password or the root username and password to access "
-"this page. If you are using Kerberos authentication, make sure you have a "
-"valid Kerberos ticket."
-msgstr ""
-"このページにアクセスするために、あなたのユーザー名とパスワード、あるいは "
-"root のユーザー名とパスワードを入力してください。Kerberos 認証を使用している"
-"場合、有効な Kerberos チケットがあることを確認してください。"
-
+msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
+msgstr "このページにアクセスするために、あなたのユーザー名とパスワード、あるいは root のユーザー名とパスワードを入力してください。Kerberos 認証を使用している場合、有効な Kerberos チケットがあることを確認してください。"
msgid "Envelope Feed"
msgstr "封筒フィード"
-
msgid "Epson"
msgstr "Epson"
-
msgid "Error Policy"
msgstr "エラーポリシー"
-
msgid "Error: need hostname after '-h' option!\n"
msgstr "Error: '-h' オプションのあとにはホスト名が必要です!\n"
-
msgid "Every 10 Labels"
msgstr "10 ラベルごと"
-
msgid "Every 2 Labels"
msgstr "2 ラベルごと"
-
msgid "Every 3 Labels"
msgstr "3 ラベルごと"
-
msgid "Every 4 Labels"
msgstr "4 ラベルごと"
-
msgid "Every 5 Labels"
msgstr "5 ラベルごと"
-
msgid "Every 6 Labels"
msgstr "6 ラベルごと"
-
msgid "Every 7 Labels"
msgstr "7 ラベルごと"
-
msgid "Every 8 Labels"
msgstr "8 ラベルごと"
-
msgid "Every 9 Labels"
msgstr "9 ラベルごと"
-
msgid "Every Label"
msgstr "すべてのラベル"
-
msgid "Expectation Failed"
msgstr "Expectation Failed"
-
msgid "Export Printers to Samba"
msgstr "Samba へプリンターをエクスポート"
-
msgid "FAIL\n"
msgstr "失敗\n"
-
msgid "File Folder"
msgstr "ファイルフォルダー"
-
msgid "File Folder - 9/16 x 3 7/16\""
msgstr "ファイルフォルダー - 9/16 x 3 7/16\""
-
-#, c-format
-msgid ""
-"File device URIs have been disabled! To enable, see the FileDevice directive "
-"in \"%s/cupsd.conf\"."
-msgstr ""
-"ファイルデバイス URI は無効になっています! 有効にするには、\"%s/cupsd.conf\" "
-"の FileDevice ディレクティブを参照してください。"
-
+msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
+msgstr "ファイルデバイス URI は無効になっています! 有効にするには、\"%s/cupsd.conf\" の FileDevice ディレクティブを参照してください。"
msgid "Folio"
msgstr "フォリオ"
-
msgid "Forbidden"
msgstr "Forbidden"
-
msgid "Fuser temperature high!"
msgstr "定着器の温度が上っています!"
-
msgid "Fuser temperature low!"
msgstr "定着器の温度が下っています!"
-
msgid "General"
msgstr "一般"
-
msgid "Generic"
msgstr "汎用"
-
msgid "German FanFold"
msgstr "German FanFold"
-
msgid "German FanFold Legal"
msgstr "German FanFold Legal"
-
msgid "Get-Response-PDU uses indefinite length"
msgstr "Get-Response-PDU は不確定の長さを使用しています"
-
msgid "Glossy Paper"
msgstr "光沢紙"
-
msgid "Got a printer-uri attribute but no job-id!"
msgstr "printer-uri 属性を取得しましたが、job-id を取得できませんでした!"
-
msgid "Grayscale"
msgstr "グレースケール"
-
msgid "HP"
msgstr "HP"
-
msgid "Hanging Folder"
msgstr "Hanging Folder"
-
msgid "Hanging Folder - 9/16 x 2\""
msgstr "Hanging Folder - 9/16 x 2\""
-
msgid "INFO: AppleTalk disabled in System Preferences\n"
msgstr "INFO: AppleTalk がシステムプレファレンスで無効にされています\n"
-
msgid "INFO: AppleTalk disabled in System Preferences.\n"
msgstr "INFO: AppleTalk がシステムプレファレンスで無効にされています。\n"
-
msgid "INFO: Canceling print job...\n"
msgstr "INFO: プリントジョブをキャンセルしています...\n"
-
msgid "INFO: Connected to printer...\n"
msgstr "INFO: プリンターに接続しました...\n"
-
msgid "INFO: Connecting to printer...\n"
msgstr "INFO: プリンターに接続中...\n"
-
msgid "INFO: Control file sent successfully\n"
msgstr "INFO: コントロールファイルが正常に送信されました\n"
-
msgid "INFO: Copying print data...\n"
msgstr ""
-
msgid "INFO: Data file sent successfully\n"
msgstr "INFO: データファイルが正常に送信されました\n"
-
-#, c-format
msgid "INFO: Finished page %d...\n"
msgstr ""
-
-#, c-format
msgid "INFO: Formatting page %d...\n"
msgstr "INFO: ページ %d をフォーマット中...\n"
-
msgid "INFO: Loading image file...\n"
msgstr "INFO: イメージファイルをロード中...\n"
-
msgid "INFO: Looking for printer...\n"
msgstr "INFO: プリンターを探しています...\n"
-
msgid "INFO: Opening connection\n"
msgstr "INFO: コネクションを開いています\n"
-
msgid "INFO: Print file sent, waiting for printer to finish...\n"
-msgstr ""
-"INFO: プリントファイルを送信し、プリンターが作業を完了するのを待っていま"
-"す...\n"
-
+msgstr "INFO: プリントファイルを送信し、プリンターが作業を完了するのを待っています...\n"
msgid "INFO: Printer busy; will retry in 10 seconds...\n"
msgstr "INFO: プリンターがビジー状態です。10 秒後に再試行します...\n"
-
msgid "INFO: Printer busy; will retry in 30 seconds...\n"
msgstr "INFO: プリンターがビジー状態です。30 秒後に再試行します...\n"
-
msgid "INFO: Printer busy; will retry in 5 seconds...\n"
msgstr "INFO: プリンターがビジー状態です。5 秒後に再試行します...\n"
-
-#, c-format
msgid "INFO: Printer does not support IPP/%d.%d, trying IPP/1.0...\n"
-msgstr ""
-"INFO: プリンターが IPP/%d.%d をサポートしていません。IPP/1.0 を試します...\n"
-
+msgstr "INFO: プリンターが IPP/%d.%d をサポートしていません。IPP/1.0 を試します...\n"
msgid "INFO: Printer is busy; will retry in 5 seconds...\n"
msgstr "INFO: プリンターがビジー状態です。5 秒後に再試行します...\n"
-
msgid "INFO: Printer is currently off-line.\n"
msgstr "INFO: プリンターは現在オフラインです。\n"
-
msgid "INFO: Printer is currently offline.\n"
msgstr "INFO: プリンターは現在オフラインです。\n"
-
msgid "INFO: Printer is now online.\n"
msgstr "INFO: プリンターは現在オンラインです。\n"
-
msgid "INFO: Printer is offline.\n"
msgstr "INFO: プリンターはオフラインです。\n"
-
msgid "INFO: Printer not connected; will retry in 30 seconds...\n"
msgstr "INFO: プリンターに接続できません。30 秒後に再試行します...\n"
-
-#, c-format
msgid "INFO: Printing page %d, %d%% complete...\n"
msgstr "INFO: ページ %d をプリント中、%d%% 完了しました...\n"
-
-#, c-format
msgid "INFO: Printing page %d...\n"
msgstr "INFO: ページ %d をプリント中...\n"
-
msgid "INFO: Ready to print.\n"
msgstr "INFO: プリントの準備ができています\n"
-
-#, c-format
msgid "INFO: Sending control file (%lu bytes)\n"
msgstr "INFO: コントロールファイルを送信中 (%lu バイト)\n"
-
-#, c-format
msgid "INFO: Sending control file (%u bytes)\n"
msgstr "INFO: コントロールファイルを送信中 (%u バイト)\n"
-
msgid "INFO: Sending data\n"
msgstr "INFO: データを送信中\n"
-
-#, c-format
msgid "INFO: Sending data file (%ld bytes)\n"
msgstr "INFO: データファイルを送信中 (%ld バイト)\n"
-
-#, c-format
msgid "INFO: Sending data file (%lld bytes)\n"
msgstr "INFO: データファイルを送信中 (%lld バイト)\n"
-
msgid "INFO: Sending print data...\n"
msgstr "INFO: プリントデータを送信中...\n"
-
-#, c-format
msgid "INFO: Sent print file, %ld bytes...\n"
msgstr "INFO: プリントファイルを送信、%ld バイト...\n"
-
-#, c-format
msgid "INFO: Sent print file, %lld bytes...\n"
msgstr "INFO: プリントファイルを送信、%lld バイト...\n"
-
-#, c-format
msgid "INFO: Spooling LPR job, %.0f%% complete...\n"
msgstr "INFO: LPR ジョブをスプール中、%.0f%% 完了しました...\n"
-
-#, c-format
msgid "INFO: Starting page %d...\n"
msgstr ""
-
msgid "INFO: Unable to contact printer, queuing on next printer in class...\n"
-msgstr ""
-"INFO: プリンターと交信できません。クラス内の次のプリンターにキューします...\n"
-
-#, c-format
+msgstr "INFO: プリンターと交信できません。クラス内の次のプリンターにキューします...\n"
msgid "INFO: Using default AppleTalk zone \"%s\"\n"
msgstr "INFO: デフォルトの AppleTalk ゾーン \"%s\" を使います\n"
-
msgid "INFO: Waiting for job to complete...\n"
msgstr "INFO: ジョブが完了するのを待っています...\n"
-
msgid "INFO: Waiting for printer to become available...\n"
msgstr "INFO: プリンターが使用可能になるのを待っています...\n"
-
msgid "ISO B0"
msgstr "ISO B0"
-
msgid "ISO B1"
msgstr "ISO B1"
-
msgid "ISO B10"
msgstr "ISO B10"
-
msgid "ISO B2"
msgstr "ISO B2"
-
msgid "ISO B3"
msgstr "ISO B3"
-
msgid "ISO B4"
msgstr "ISO B4"
-
msgid "ISO B4 Envelope"
msgstr "ISO B4 封筒"
-
msgid "ISO B5"
msgstr "ISO B5"
-
msgid "ISO B5 (Oversize)"
msgstr "ISO B5 (特大)"
-
msgid "ISO B5 Envelope"
msgstr "ISO B5 封筒"
-
msgid "ISO B6"
msgstr "ISO B6"
-
msgid "ISO B6 Envelope"
msgstr "ISO B6 封筒"
-
msgid "ISO B7"
msgstr "ISO B7"
-
msgid "ISO B8"
msgstr "ISO B8"
-
msgid "ISO B9"
msgstr "ISO B9"
-
msgid "Illegal control character"
msgstr "不正な制御文字"
-
msgid "Illegal main keyword string"
msgstr "不正なメインキーワード文字列"
-
msgid "Illegal option keyword string"
msgstr "不正なオプションキーワード文字列"
-
msgid "Illegal translation string"
msgstr "不正な翻訳文字列"
-
msgid "Illegal whitespace character"
msgstr "不正な空白文字"
-
msgid "Ink/toner almost empty."
msgstr "インクまたはトナーがほとんどありません。"
-
msgid "Ink/toner empty!"
msgstr "インクまたはトナーがありません!"
-
msgid "Ink/toner waste bin almost full."
msgstr "廃インクまたは廃トナー容器がほとんど一杯です。"
-
msgid "Ink/toner waste bin full!"
msgstr "廃インクまたは廃トナー容器が一杯です!"
-
msgid "Installable Options"
msgstr "インストール可能オプション"
-
msgid "Installed"
msgstr "インストールされています"
-
msgid "IntelliBar Label Printer"
-msgstr "IntelliBar ラベルプリンター"
-
+msgstr "IntelliBar ラベルプリンタ"
msgid "Intellitech"
msgstr "Intellitech"
-
msgid "Interlock open."
msgstr "インターロックが開いています。"
-
msgid "Internal Server Error"
msgstr ""
-
msgid "Internal error"
msgstr "内部エラー"
-
msgid "Internet Postage 2-Part"
msgstr "Internet Postage 2-Part"
-
msgid "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
msgstr "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
-
msgid "Internet Postage 3-Part"
msgstr "Internet Postage 3-Part"
-
msgid "Internet Postage 3-Part - 2 1/4 x 7\""
msgstr "Internet Postage 3-Part - 2 1/4 x 7\""
-
msgid "Internet Printing Protocol"
msgstr "インターネット印刷プロトコル"
-
msgid "Invite Envelope"
msgstr "招待状封筒"
-
msgid "Italian Envelope"
msgstr "イタリア封筒"
-
msgid "JCL"
msgstr "JCL"
-
-#, c-format
msgid "Job #%d cannot be restarted - no files!"
msgstr "ジョブ番号 %d を再開できません - ファイルが見つかりません!"
-
-#, c-format
msgid "Job #%d does not exist!"
msgstr "ジョブ番号 %d は存在しません!"
-
-#, c-format
msgid "Job #%d is already aborted - can't cancel."
msgstr "ジョブ番号 %d はすでに中断されています - キャンセルできません。"
-
-#, c-format
msgid "Job #%d is already canceled - can't cancel."
msgstr "ジョブ番号 %d はすでにキャンセルされています - キャンセルできません。"
-
-#, c-format
msgid "Job #%d is already completed - can't cancel."
msgstr "ジョブ番号 %d はすでに完了しています - キャンセルできません。"
-
-#, c-format
msgid "Job #%d is finished and cannot be altered!"
msgstr "ジョブ番号 %d はすでに終了し、変更できません!"
-
-#, c-format
msgid "Job #%d is not complete!"
msgstr "ジョブ番号 %d は完了していません!"
-
-#, c-format
msgid "Job #%d is not held for authentication!"
msgstr "ジョブ番号 %d は認証のために保留されていません!"
-
-#, c-format
msgid "Job #%d is not held!"
msgstr "ジョブ番号 %d は保留されていません!"
-
-#, c-format
msgid "Job #%s does not exist!"
msgstr "ジョブ番号 #%s は存在しません!"
-
-#, c-format
msgid "Job %d not found!"
msgstr "ジョブ番号 %d は見つかりません!"
-
msgid "Job Completed"
msgstr "ジョブ完了"
-
msgid "Job Created"
msgstr "ジョブ作成"
-
msgid "Job ID: "
msgstr "ジョブ ID: "
-
msgid "Job Options Changed"
msgstr "ジョブオプション変更"
-
msgid "Job Stopped"
msgstr "ジョブ中止"
-
msgid "Job UUID: "
msgstr "ジョブ UUID: "
-
msgid "Job is completed and cannot be changed."
msgstr "ジョブは完了し変更できません。"
-
msgid "Job operation failed:"
msgstr "ジョブ操作失敗:"
-
msgid "Job state cannot be changed."
msgstr "ジョブの状態を変更できません。"
-
msgid "Job subscriptions cannot be renewed!"
msgstr "ジョブサブスクリプションが更新できません!"
-
msgid "Jobs"
msgstr "ジョブ"
-
msgid "Kaku2 Envelope"
msgstr "角 2 封筒"
-
msgid "Kaku3 Envelope"
msgstr "角 3 封筒"
-
msgid "LPD/LPR Host or Printer"
msgstr "LPD/LPR ホストまたはプリンター"
-
msgid "Label Printer"
msgstr "ラベルプリンター"
-
msgid "Label Top"
msgstr "ラベルトップ"
-
-#, c-format
msgid "Language \"%s\" not supported!"
msgstr "言語 \"%s\" はサポートされていません!"
-
msgid "Large Address"
msgstr "ラージアドレス"
-
msgid "Large Address - 1 4/10 x 3 1/2\""
msgstr "ラージアドレス - 1 4/10 x 3 1/2\""
-
msgid "LaserJet Series PCL 4/5"
msgstr "LaserJet Series PCL 4/5"
-
msgid "Light"
msgstr "薄い"
-
msgid "Line longer than the maximum allowed (255 characters)"
msgstr "1 行が最大値 (255 文字) を超えています"
-
msgid "List Available Printers"
msgstr "使用可能なプリンターをリスト化"
-
msgid "Location: "
msgstr "場所: "
-
msgid "Long-Edge (Portrait)"
msgstr "長辺給紙 (縦向き)"
-
msgid "Make and Model: "
msgstr "プリンタードライバー: "
-
msgid "Manual Feed"
msgstr "手差し"
-
msgid "Media Dimensions: "
msgstr "用紙の大きさ: "
-
msgid "Media Limits: "
msgstr "用紙の印字領域: "
-
msgid "Media Name: "
msgstr "用紙名:"
-
msgid "Media Size"
msgstr "用紙サイズ"
-
msgid "Media Source"
msgstr "給紙"
-
msgid "Media Tracking"
msgstr "用紙の経路"
-
msgid "Media Type"
msgstr "用紙種類"
-
msgid "Media jam!"
msgstr "紙詰まりです!"
-
msgid "Media tray almost empty."
msgstr "用紙トレイが空になりかけています。"
-
msgid "Media tray empty!"
msgstr "用紙トレイが空になりました!"
-
msgid "Media tray missing!"
msgstr "用紙トレイが見つかりません!"
-
msgid "Media tray needs to be filled."
msgstr "用紙トレイに補充が必要です。"
-
msgid "Medium"
msgstr "紙質"
-
msgid "Memory allocation error"
msgstr "メモリ割り当てエラー"
-
msgid "Missing PPD-Adobe-4.x header"
msgstr "PPD-Adobe-4.x ヘッダがありません"
-
msgid "Missing asterisk in column 1"
msgstr "1 列目にアスタリスクがありません"
-
msgid "Missing document-number attribute!"
msgstr "document-number 属性がありません!"
-
-#, c-format
msgid "Missing double quote on line %d!"
msgstr "%d 行に二重引用符がありません!"
-
msgid "Missing form variable!"
msgstr "form 変数がありません!"
-
msgid "Missing notify-subscription-ids attribute!"
msgstr "notify-subscription-ids 属性がありません!"
-
msgid "Missing requesting-user-name attribute!"
msgstr "requesting-user-name 属性が設定されていません!"
-
msgid "Missing required attributes!"
msgstr "必須の属性が設定されていません!"
-
-#, c-format
msgid "Missing value on line %d!"
msgstr "%d 行に値がありません!"
-
msgid "Missing value string"
msgstr "値文字列がありません"
-
-#, c-format
-msgid ""
-"Model: name = %s\n"
-" natural_language = %s\n"
-" make-and-model = %s\n"
-" device-id = %s\n"
-msgstr ""
-"モデル: name = %s\n"
-" natural_language = %s\n"
-" make-and-model = %s\n"
-" device-id = %s\n"
-
+msgid "Model: name = %s\n natural_language = %s\n make-and-model = %s\n device-id = %s\n"
+msgstr "モデル: name = %s\n natural_language = %s\n make-and-model = %s\n device-id = %s\n"
msgid "Modify Class"
msgstr "クラスの変更"
-
msgid "Modify Printer"
msgstr "プリンターの変更"
-
msgid "Monarch"
msgstr "Monarch"
-
msgid "Monarch Envelope"
msgstr "Monarch 封筒"
-
msgid "Move All Jobs"
msgstr "すべてのジョブの移動"
-
msgid "Move Job"
msgstr "ジョブの移動"
-
msgid "Moved Permanently"
msgstr "別の場所へ移動しました"
-
-#, c-format
msgid "NOTICE: Print file accepted - job ID %d.\n"
msgstr "NOTICE: プリントファイルを受け付けました - ジョブ ID %d。\n"
-
msgid "NOTICE: Print file accepted - job ID unknown.\n"
msgstr "NOTICE: プリントファイルを受け付けました - ジョブ ID 不明。\n"
-
msgid "NULL PPD file pointer"
msgstr "PPD ファイルポインターが NULL です"
-
msgid "Name OID uses indefinite length"
msgstr "OID 名は限定的な長さを使用します"
-
msgid "Never"
msgstr "Never"
-
msgid "New Stylus Color Series"
msgstr "New Stylus Color シリーズ"
-
msgid "New Stylus Photo Series"
msgstr "New Stylus Photo シリーズ"
-
msgid "No"
msgstr "いいえ"
-
msgid "No Content"
msgstr "中身がありません"
-
msgid "No PPD name!"
msgstr "PPD の名前がありません!"
-
msgid "No VarBind SEQUENCE"
msgstr "VarBind SEQUENCE がありません"
-
msgid "No Windows printer drivers are installed!"
msgstr "Windows プリンタードライバーがインストールされていません!"
-
msgid "No active connection"
msgstr "アクティブな接続はありません"
-
-#, c-format
msgid "No active jobs on %s!"
msgstr "%s にはアクティブなジョブはありません!"
-
msgid "No attributes in request!"
msgstr "リクエストに属性がありません!"
-
msgid "No authentication information provided!"
msgstr "認証情報が提供されていません!"
-
msgid "No community name"
msgstr "コミュニティ名がありません"
-
msgid "No default printer"
msgstr "デフォルトのプリンターはありません"
-
msgid "No destinations added."
msgstr "追加された宛先はありません"
-
msgid "No error-index"
msgstr "エラーインデックスがありません"
-
msgid "No error-status"
msgstr "エラーステータスがありません"
-
msgid "No file!?!"
msgstr "ファイルがありません!?!"
-
msgid "No modification time!"
msgstr "変更時刻がありません!"
-
msgid "No name OID"
msgstr "OID 名がありません"
-
msgid "No printer name!"
msgstr "プリンター名がありません!"
-
msgid "No printer-uri found for class!"
msgstr "クラスのプリンターURI が見つかりません!"
-
msgid "No printer-uri found!"
msgstr "プリンターURI が見つかりません!"
-
msgid "No printer-uri in request!"
msgstr "プリンターURI のリクエストがありません!"
-
msgid "No request-id"
msgstr "リクエストID がありません"
-
msgid "No subscription attributes in request!"
msgstr "リクエストにサブスクリプション属性がありません!"
-
msgid "No subscriptions found."
msgstr "サブスクリプションが見つかりません。"
-
msgid "No variable-bindings SEQUENCE"
msgstr "variable-bindings SEQUENCE がありません"
-
msgid "No version number"
msgstr "バージョン名がありません"
-
msgid "Non-continuous (Mark sensing)"
msgstr "非連続です (Mark sensing)"
-
msgid "Non-continuous (Web sensing)"
msgstr "非連続です (Web sensing)"
-
msgid "Normal"
msgstr "標準"
-
msgid "Not Found"
msgstr "見つかりません"
-
msgid "Not Implemented"
msgstr "実装されていません"
-
msgid "Not Installed"
msgstr "インストールされていません"
-
msgid "Not Modified"
msgstr "変更されていません"
-
msgid "Not Supported"
msgstr "サポートされていません"
-
msgid "Not allowed to print."
msgstr "印刷が許可されていません。"
-
msgid "Note"
msgstr "注意"
-
msgid "OK"
msgstr "OK"
-
msgid "OPC almost at end-of-life."
msgstr "OPC はもうすぐ交換が必要になります。"
-
msgid "OPC at end-of-life!"
msgstr "OPC は交換時期です!"
-
msgid "Off (1-Sided)"
msgstr "Off (片面)"
-
msgid "Oki"
msgstr "Oki"
-
msgid "Online Help"
msgstr "オンラインヘルプ"
-
-#, c-format
msgid "Open of %s failed: %s"
msgstr "%s のオープンに失敗しました: %s"
-
msgid "OpenGroup without a CloseGroup first"
msgstr "OpenGroup の前にまず CloseGroup が必要です"
-
msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
msgstr "OpenUI/JCLOpenUI の前にまず CloseUI/JCLCloseUI が必要です"
-
msgid "Operation Policy"
msgstr "操作ポリシー"
-
msgid "Options Installed"
msgstr "インストールされたオプション"
-
msgid "Options: "
msgstr "オプション:"
-
msgid "Out of toner!"
msgstr "トナー切れです!"
-
msgid "Output Mode"
msgstr "出力モード"
-
msgid "Output bin almost full."
msgstr "排紙トレイがほとんど一杯です。"
-
msgid "Output bin full!"
msgstr "排紙トレイが一杯です!"
-
-#, c-format
msgid "Output for printer %s is sent to %s\n"
msgstr "プリンター %s の出力は %s に送られます\n"
-
-#, c-format
msgid "Output for printer %s is sent to remote printer %s on %s\n"
msgstr "プリンター %s の出力は、リモートプリンター %s (%s 上) に送られます\n"
-
-#, c-format
msgid "Output for printer %s/%s is sent to %s\n"
msgstr "プリンター %s/%s の出力は %s に送られます\n"
-
-#, c-format
msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
-msgstr ""
-"プリンター %s/%s の出力は、リモートプリンター %s (%s 上) に送られます\n"
-
+msgstr "プリンター %s/%s の出力は、リモートプリンター %s (%s 上) に送られます\n"
msgid "Output tray missing!"
msgstr "排紙トレイが見つかりません!"
-
msgid "PASS\n"
msgstr "合格\n"
-
msgid "PCL Laser Printer"
msgstr "PCL レーザープリンター"
-
msgid "PRC1 Envelope"
msgstr "PRC1 封筒"
-
msgid "PRC10 Envelope"
msgstr "PRC10 封筒"
-
msgid "PRC16K"
msgstr "PRC16K"
-
msgid "PRC2 Envelope"
msgstr "PRC2 封筒"
-
msgid "PRC3 Envelope"
msgstr "PRC3 封筒"
-
msgid "PRC32K"
msgstr "PRC32K"
-
msgid "PRC32K (Oversize)"
msgstr "PRC32K (特大)"
-
msgid "PRC4 Envelope"
msgstr "PRC4 封筒"
-
msgid "PRC5 Envelope"
msgstr "PRC5 封筒"
-
msgid "PRC6 Envelope"
msgstr "PRC6 封筒"
-
msgid "PRC7 Envelope"
msgstr "PRC7 封筒"
-
msgid "PRC8 Envelope"
msgstr "PRC8 封筒"
-
msgid "PRC9 Envelope"
msgstr "PRC9 封筒"
-
msgid "Packet does not contain a Get-Response-PDU"
msgstr "パケットが Get-Response-PDU を含んでいません"
-
msgid "Packet does not start with SEQUENCE"
msgstr "パケットが SEQUENCE から始まりません"
-
msgid "ParamCustominCutInterval"
msgstr "ParamCustominCutInterval"
-
msgid "ParamCustominTearInterval"
msgstr "ParamCustominTearInterval"
-
-#, c-format
msgid "Password for %s on %s? "
msgstr "%s のパスワード (%s 上)? "
-
-#, c-format
msgid "Password for %s required to access %s via SAMBA: "
msgstr "%s のパスワード (SAMBA 経由で %s にアクセスするのに必要):"
-
msgid "Pause Class"
msgstr "クラスの休止"
-
msgid "Pause Printer"
msgstr "プリンターの休止"
-
msgid "Peel-Off"
msgstr "Peel-Off"
-
msgid "Personal Envelope"
msgstr "パーソナル封筒"
-
msgid "Photo"
msgstr "写真"
-
msgid "Photo Labels"
msgstr "写真ラベル"
-
msgid "Plain Paper"
msgstr "普通紙"
-
msgid "Policies"
msgstr "ポリシー"
-
msgid "Port Monitor"
msgstr "ポートモニター"
-
msgid "PostScript Printer"
msgstr "ポストスクリプトプリンター"
-
msgid "Postcard"
msgstr "ハガキ"
-
msgid "Print Density"
msgstr "印刷密度"
-
msgid "Print Job:"
msgstr "ジョブの印刷:"
-
msgid "Print Mode"
msgstr "印刷モード"
-
msgid "Print Rate"
msgstr "印刷レート"
-
msgid "Print Self-Test Page"
msgstr "自己テストページの印刷"
-
msgid "Print Speed"
msgstr "印刷速度"
-
msgid "Print Test Page"
msgstr "テストページの印刷"
-
msgid "Print and Cut"
-msgstr "Print and Cut"
-
+msgstr "プリントしてカット"
msgid "Print and Tear"
-msgstr "Print and Tear"
-
+msgstr "プリントして切り取る"
msgid "Printed For: "
-msgstr "Printed For: "
-
+msgstr "プリント対象:"
msgid "Printed From: "
-msgstr "Printed From: "
-
+msgstr "プリント元:"
msgid "Printed On: "
-msgstr "Printed On: "
-
+msgstr "プリント先:"
msgid "Printer Added"
msgstr "追加されたプリンター"
-
msgid "Printer Default"
msgstr "デフォルトのプリンター"
-
msgid "Printer Deleted"
msgstr "削除されたプリンター"
-
msgid "Printer Modified"
msgstr "変更されたプリンター"
-
msgid "Printer Name: "
msgstr "プリンター名:"
-
msgid "Printer Paused"
msgstr "プリンターの休止"
-
msgid "Printer Settings"
msgstr "プリンター設定"
-
msgid "Printer offline."
msgstr "プリンターはオフラインです。"
-
msgid "Printer:"
msgstr "プリンター:"
-
msgid "Printers"
msgstr "プリンター"
-
msgid "Purge Jobs"
msgstr "ジョブの削除"
-
msgid "Quarto"
msgstr "Quarto"
-
msgid "Quota limit reached."
msgstr "Quota の制限に達しました。"
-
msgid "Rank Owner Job File(s) Total Size\n"
msgstr "ランク 所有者 ジョブ ファイル 合計サイズ\n"
-
-msgid ""
-"Rank Owner Pri Job Files Total Size\n"
-msgstr ""
-"ランク 所有者 優先 ジョブ ファイル 合計サイズ\n"
-
+msgid "Rank Owner Pri Job Files Total Size\n"
+msgstr "ランク 所有者 優先 ジョブ ファイル 合計サイズ\n"
msgid "Reject Jobs"
msgstr "ジョブの拒否"
-
msgid "Reprint After Error"
msgstr "エラー後の再印刷"
-
msgid "Request Entity Too Large"
msgstr "要求するエンティティが大きすぎます"
-
msgid "Resolution"
msgstr "解像度"
-
msgid "Resume Class"
msgstr "クラスを再開する"
-
msgid "Resume Printer"
msgstr "プリンターを再開する"
-
msgid "Return Address"
msgstr "アドレスを戻す"
-
msgid "Return Address - 3/4 x 2\""
msgstr "アドレスを戻す ー 3/4 x 2\""
-
msgid "Rewind"
msgstr "戻る"
-
-#, c-format
msgid "Running command: %s %s -N -A %s -c '%s'\n"
msgstr "コマンドを実行中: %s %s -N -A %s -c '%s'\n"
-
msgid "SCSI Printer"
msgstr "SCSI プリンター"
-
msgid "SEQUENCE uses indefinite length"
msgstr "SEQUENCE は不定長を使用しています"
-
msgid "See Other"
msgstr "残りを見てください"
-
-#, c-format
msgid "Serial Port #%d"
msgstr "シリアルーポート #%d"
-
msgid "Server Restarted"
msgstr "再起動されたサーバー"
-
msgid "Server Security Auditing"
msgstr "サーバーのセキュリティーチェック"
-
msgid "Server Started"
msgstr "開始されたサーバー"
-
msgid "Server Stopped"
msgstr "停止されたサーバー"
-
msgid "Service Unavailable"
msgstr "利用できないサービス"
-
msgid "Set Allowed Users"
msgstr "許可するユーザーの設定"
-
msgid "Set As Server Default"
msgstr "サーバーをデフォルトに設定"
-
msgid "Set Class Options"
msgstr "クラスオプションを設定"
-
msgid "Set Printer Options"
msgstr "プリンターオプションの設定"
-
msgid "Set Publishing"
msgstr "公開の設定"
-
msgid "Shipping Address"
msgstr "発送アドレス"
-
msgid "Shipping Address - 2 5/16 x 4\""
msgstr "発送アドレス - 2 5/16 x 4\""
-
msgid "Short-Edge (Landscape)"
msgstr "短辺 (横原稿)"
-
msgid "Special Paper"
msgstr "スペシャルペーパー"
-
msgid "Standard"
msgstr "標準"
-
msgid "Starting Banner"
msgstr "開始バナー"
-
msgid "Statement"
msgstr "記述"
-
msgid "Stylus Color Series"
msgstr "Stylus Color シリーズ"
-
msgid "Stylus Photo Series"
msgstr "Stylus Photo シリーズ"
-
msgid "Super A"
msgstr "スーパー A"
-
msgid "Super B"
msgstr "スーパー B"
-
msgid "Super B/A3"
msgstr "スーパー B/A3"
-
msgid "Switching Protocols"
msgstr "プロトコルの変更"
-
msgid "Tabloid"
msgstr "タブロイド"
-
msgid "Tabloid (Oversize)"
msgstr "タブロイド (特大)"
-
msgid "Tear"
msgstr "Tear"
-
msgid "Tear-Off"
msgstr "Tear-Off"
-
msgid "Tear-Off Adjust Position"
msgstr "Tear-Off 位置調節"
-
-#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr "PPD ファイル \"%s\" が見つかりません。"
-
-#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr "PPD ファイル \"%s\" が開きませんでした: %s"
-
-msgid ""
-"The class name may only contain up to 127 printable characters and may not "
-"contain spaces, slashes (/), or the pound sign (#)."
-msgstr ""
-"クラス名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記"
-"号 (#) を含んではなりません。"
-
-msgid ""
-"The notify-lease-duration attribute cannot be used with job subscriptions."
-msgstr ""
-"notify-lease-duration 属性は、ジョブサブスクリプションと一緒に使うことはでき"
-"ません。"
-
-#, c-format
+msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "クラス名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記号 (#) を含んではなりません。"
+msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr "notify-lease-duration 属性は、ジョブサブスクリプションと一緒に使うことはできません。"
msgid "The notify-user-data value is too large (%d > 63 octets)!"
msgstr "notify-user-data 値が大きすぎます (%d > 63 オクテット)!"
-
-msgid ""
-"The printer name may only contain up to 127 printable characters and may not "
-"contain spaces, slashes (/), or the pound sign (#)."
-msgstr ""
-"プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポン"
-"ド記号 (#) を含んではなりません。"
-
+msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記号 (#) を含んではなりません。"
msgid "The printer or class is not shared!"
msgstr "プリンターまたはクラスは共有できません!"
-
msgid "The printer or class was not found."
msgstr "プリンターまたはクラスが見つかりませんでした。"
-
-#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr "printer-uri \"%s\" には、無効な文字が含まれています。"
-
msgid "The printer-uri attribute is required!"
msgstr "printer-uri 属性は必須です!"
-
-msgid ""
-"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
-msgstr ""
-"printer-uri は、\"ipp://ホスト名/classes/クラス名\" 形式でなければなりませ"
-"ん。"
-
-msgid ""
-"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
-msgstr ""
-"printer-uri は \"ipp://ホスト名/printers/プリンター名\" 形式でなければなりま"
-"せん。"
-
-msgid ""
-"The subscription name may not contain spaces, slashes (/), question marks "
-"(?), or the pound sign (#)."
-msgstr ""
-"サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ポンド記号 "
-"(#) を使用しないでください。"
-
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr "printer-uri は、\"ipp://ホスト名/classes/クラス名\" 形式でなければなりません。"
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr "printer-uri は \"ipp://ホスト名/printers/プリンター名\" 形式でなければなりません。"
+msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
+msgstr "サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ポンド記号 (#) を使用しないでください。"
msgid "There are too many subscriptions."
msgstr "サブスクリプションが多すぎます。"
-
msgid "Thermal Transfer Media"
msgstr "熱転写メディア"
-
msgid "Title: "
msgstr "タイトル: "
-
msgid "Toner low."
msgstr "トナーが少なくなっています。"
-
msgid "Too many active jobs."
msgstr "アクティブなジョブが多すぎます。"
-
-#, c-format
msgid "Too many job-sheets values (%d > 2)!"
msgstr "job-sheets 値が多すぎます (%d > 2)!"
-
-#, c-format
msgid "Too many printer-state-reasons values (%d > %d)!"
msgstr "printer-state-reasons 値が多すぎます (%d > %d)!"
-
msgid "Transparency"
msgstr "OHP シート"
-
msgid "Tray"
msgstr "トレイ"
-
msgid "Tray 1"
msgstr "トレイ 1"
-
msgid "Tray 2"
msgstr "トレイ 2"
-
msgid "Tray 3"
msgstr "トレイ 3"
-
msgid "Tray 4"
msgstr "トレイ 4"
-
msgid "URI Too Long"
msgstr "URI が長過ぎます"
-
msgid "US Executive"
msgstr "US エグゼクティブ"
-
msgid "US Fanfold"
msgstr "US Fanfold"
-
msgid "US Ledger"
msgstr "US レジャー"
-
msgid "US Legal"
msgstr "US リーガル"
-
msgid "US Legal (Oversize)"
msgstr "US リーガル (特大)"
-
msgid "US Letter"
msgstr "US レター"
-
msgid "US Letter (Oversize)"
msgstr "US レター (特大)"
-
msgid "US Letter (Small)"
msgstr "US レター (小)"
-
-#, c-format
msgid "USB Serial Port #%d"
msgstr "USB シリアルポート #%d"
-
msgid "Unable to access cupsd.conf file:"
msgstr "cupsd.conf ファイルにアクセスできません:"
-
msgid "Unable to add RSS subscription:"
msgstr " RSS 購読を追加できません:"
-
msgid "Unable to add class:"
msgstr "クラスを追加できません:"
-
-#, c-format
msgid "Unable to add job for destination \"%s\"!"
msgstr "宛先\"%s\"にジョブを追加できません!"
-
msgid "Unable to add printer:"
msgstr "プリンターを追加ができません:"
-
msgid "Unable to allocate memory for file types!"
msgstr "ファイルタイプ用にメモリを割り当てられません!"
-
msgid "Unable to cancel RSS subscription:"
msgstr "RSS 購読をキャンセルできません:"
-
msgid "Unable to change printer-is-shared attribute:"
msgstr "printer-is-shared 属性を変更することができません:"
-
msgid "Unable to change printer:"
msgstr "プリンターを変更できません:"
-
msgid "Unable to change server settings:"
msgstr "サーバーの設定を変更できません:"
-
msgid "Unable to connect to host."
msgstr "ホストに接続できません"
-
-#, c-format
msgid "Unable to copy 64-bit CUPS printer driver files (%d)!"
msgstr "64-bit 版の CUPS プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
msgid "Unable to copy 64-bit Windows printer driver files (%d)!"
msgstr "64-bit 版の Windows プリンタードライバーをコピーできません (%d)!"
-
-#, c-format
msgid "Unable to copy CUPS printer driver files (%d)!"
msgstr "複数の CUPS プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
msgid "Unable to copy PPD file - %s!"
msgstr "PPD ファイルをコピーできません! - %s"
-
msgid "Unable to copy PPD file!"
msgstr "PPD ファイルをコピーできません!"
-
-#, c-format
msgid "Unable to copy Windows 2000 printer driver files (%d)!"
-msgstr ""
-"複数の Windows 2000 プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
+msgstr "複数の Windows 2000 プリンタードライバーファイルをコピーできません (%d)!"
msgid "Unable to copy Windows 9x printer driver files (%d)!"
msgstr "複数の Windows 9x プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
msgid "Unable to copy interface script - %s!"
msgstr "インターフェイススクリプトをコピーできません! - %s"
-
msgid "Unable to create printer-uri!"
msgstr "printer-uri を作成できません!"
-
msgid "Unable to create temporary file:"
msgstr "テンポラリファイルを作成できません:"
-
msgid "Unable to delete class:"
msgstr "クラスを削除できません:"
-
msgid "Unable to delete printer:"
msgstr "プリンターを削除できません:"
-
msgid "Unable to do maintenance command:"
msgstr "メンテナンスコマンドを実行できません:"
-
msgid "Unable to edit cupsd.conf files larger than 1MB!"
msgstr "1MB 以上の cupsd.conf ファイルは編集できません!"
-
msgid "Unable to find destination for job!"
msgstr "ジョブの宛先が見つかりません!"
-
msgid "Unable to find printer!\n"
msgstr "プリンターが見つかりません!\n"
-
msgid "Unable to get class list:"
msgstr "クラスリストを取得できません:"
-
msgid "Unable to get class status:"
msgstr "クラスの状態を取得できません:"
-
msgid "Unable to get list of printer drivers:"
msgstr "プリンタードライバーのリストを取得できません:"
-
msgid "Unable to get printer attributes:"
msgstr "プリンター属性を取得できません:"
-
msgid "Unable to get printer list:"
msgstr "プリンターリストを取得できません:"
-
msgid "Unable to get printer status:"
msgstr "プリンターの状態を取得できません:"
-
-#, c-format
msgid "Unable to install Windows 2000 printer driver files (%d)!"
-msgstr ""
-"複数の Windows 2000 プリンタードライバーファイルをインストールできません (%"
-"d)!"
-
-#, c-format
+msgstr "複数の Windows 2000 プリンタードライバーファイルをインストールできません (%d)!"
msgid "Unable to install Windows 9x printer driver files (%d)!"
-msgstr ""
-"複数の Windows 9x プリンタードライバーファイルをインストールできません (%d)!"
-
+msgstr "複数の Windows 9x プリンタードライバーファイルをインストールできません (%d)!"
msgid "Unable to modify class:"
msgstr "クラスを変更できません:"
-
msgid "Unable to modify printer:"
msgstr "プリンターを変更できません:"
-
msgid "Unable to move job"
msgstr "ジョブを移動できません"
-
msgid "Unable to move jobs"
msgstr "複数のジョブを移動できません"
-
msgid "Unable to open PPD file"
msgstr "PPD ファイルを読み込むことができません"
-
msgid "Unable to open PPD file:"
msgstr "PPD ファイルを読み込むことができません:"
-
msgid "Unable to open cupsd.conf file:"
msgstr "cupsd.conf ファイルを開けません:"
-
-#, c-format
msgid "Unable to open document %d in job %d!"
msgstr "ドキュメント %d (ジョブ %d)を開けません!"
-
msgid "Unable to print test page:"
msgstr "テストページを印刷できません:"
-
-#, c-format
msgid "Unable to run \"%s\": %s\n"
msgstr "\"%s\" を実行できません: %s\n"
-
msgid "Unable to send command to printer driver!"
msgstr "プリンタードライバーにコマンドを送信できません!"
-
-#, c-format
msgid "Unable to set Windows printer driver (%d)!"
msgstr "Windows プリンタードライバーを設定できません (%d)!"
-
msgid "Unable to set options:"
msgstr "オプションを設定できません:"
-
msgid "Unable to set server default:"
msgstr "サーバーをデフォルトに設定できません:"
-
msgid "Unable to upload cupsd.conf file:"
msgstr "cupsd.conf ファイルをアップロードできません:"
-
msgid "Unable to use legacy USB class driver!\n"
msgstr "古いタイプの USB クラスドライバーは使用できません!\n"
-
msgid "Unauthorized"
msgstr "不許可"
-
msgid "Units"
msgstr "ユニット"
-
msgid "Unknown"
msgstr "未知"
-
-#, c-format
msgid "Unknown printer error (%s)!"
msgstr "未知のプリンターエラー (%s) です!"
-
-#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr "\"%s\" は未知の printer-error-policy です。"
-
-#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr "\"%s\" は未知の printer-op-policy です。"
-
-#, c-format
msgid "Unsupported character set \"%s\"!"
msgstr "\"%s\" はサポートされていない文字セットです!"
-
-#, c-format
msgid "Unsupported compression \"%s\"!"
msgstr "\"%s\" はサポートされていない圧縮形式です!"
-
-#, c-format
msgid "Unsupported compression attribute %s!"
msgstr "%s はサポートされていない圧縮属性です!"
-
-#, c-format
msgid "Unsupported format \"%s\"!"
msgstr "\"%s\" はサポートされていない形式です!"
-
-#, c-format
msgid "Unsupported format '%s'!"
msgstr "'%s' はサポートされていない形式です!"
-
-#, c-format
msgid "Unsupported format '%s/%s'!"
msgstr "'%s/%s' はサポートされていない形式です!"
-
msgid "Unsupported value type"
msgstr "サポートされていない型の値です"
-
msgid "Upgrade Required"
msgstr "アップグレードが必要です"
-
-msgid ""
-"Usage:\n"
-"\n"
-" lpadmin [-h server] -d destination\n"
-" lpadmin [-h server] -x destination\n"
-" lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n"
-" [-r remove-class] [-v device] [-D description]\n"
-" [-P ppd-file] [-o name=value]\n"
-" [-u allow:user,user] [-u deny:user,user]\n"
-"\n"
-msgstr ""
-"Usage:\n"
-"\n"
-" lpadmin [-h サーバー] -d 宛先\n"
-" lpadmin [-h サーバー] -x 宛先\n"
-" lpadmin [-h サーバー] -p プリンター [-c 追加クラス] [-i インターフェイ"
-"ス]\n"
-" [-m モデル] [-r 削除クラス] [-v デバイス]\n"
-" [-D 宛先] [-P PPD ファイル] [-o 名前=値]\n"
-" [-u allow:ユーザー,ユーザー] [-u deny:ユーザー,ユー"
-"ザー]\n"
-"\n"
-
-#, c-format
+msgid "Usage:\n\n lpadmin [-h server] -d destination\n lpadmin [-h server] -x destination\n lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n [-r remove-class] [-v device] [-D description]\n [-P ppd-file] [-o name=value]\n [-u allow:user,user] [-u deny:user,user]\n\n"
+msgstr "Usage:\n\n lpadmin [-h サーバー] -d 宛先\n lpadmin [-h サーバー] -x 宛先\n lpadmin [-h サーバー] -p プリンター [-c 追加クラス] [-i インターフェイス]\n [-m モデル] [-r 削除クラス] [-v デバイス]\n [-D 宛先] [-P PPD ファイル] [-o 名前=値]\n [-u allow:ユーザー,ユーザー] [-u deny:ユーザー,ユーザー]\n\n"
msgid "Usage: %s job user title copies options [filename]\n"
-msgstr ""
-"使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル名]\n"
-
-#, c-format
+msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル名]\n"
msgid "Usage: %s job-id user title copies options [file]\n"
msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル]\n"
-
-#, c-format
msgid "Usage: %s job-id user title copies options file\n"
msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション ファイル\n"
-
-msgid ""
-"Usage: convert [ options ]\n"
-"\n"
-"Options:\n"
-"\n"
-" -e Use every filter from the PPD file\n"
-" -f filename Set file to be converted (otherwise stdin)\n"
-" -o filename Set file to be generated (otherwise stdout)\n"
-" -i mime/type Set input MIME type (otherwise auto-typed)\n"
-" -j mime/type Set output MIME type (otherwise application/pdf)\n"
-" -P filename.ppd Set PPD file\n"
-" -a 'name=value ...' Set option(s)\n"
-" -U username Set username for job\n"
-" -J title Set title\n"
-" -c copies Set number of copies\n"
-" -u Remove the PPD file when finished\n"
-" -D Remove the input file when finished\n"
+msgid "Usage: convert [ options ]\n\nOptions:\n\n -e Use every filter from the PPD file\n -f filename Set file to be converted (otherwise stdin)\n -o filename Set file to be generated (otherwise stdout)\n -i mime/type Set input MIME type (otherwise auto-typed)\n -j mime/type Set output MIME type (otherwise application/pdf)\n -P filename.ppd Set PPD file\n -a 'name=value ...' Set option(s)\n -U username Set username for job\n -J title Set title\n -c copies Set number of copies\n -u Remove the PPD file when finished\n -D Remove the input file when finished\n"
msgstr ""
-
-msgid ""
-"Usage: cupsaddsmb [options] printer1 ... printerN\n"
-" cupsaddsmb [options] -a\n"
-"\n"
-"Options:\n"
-" -E Encrypt the connection to the server\n"
-" -H samba-server Use the named SAMBA server\n"
-" -U samba-user Authenticate using the named SAMBA user\n"
-" -a Export all printers\n"
-" -h cups-server Use the named CUPS server\n"
-" -v Be verbose (show commands)\n"
-msgstr ""
-"使い方: cupsaddsmb [オプション] プリンター ... プリンターN\n"
-" cupsaddsmb [オプション] -a\n"
-"\n"
-"オプション:\n"
-" -E サーバーとの接続を暗号化する\n"
-" -H sambaサーバー 指定の SAMBA サーバーを使う\n"
-" -U sambaユーザー 指定の SAMBA ユーザーを使って認証する\n"
-" -a すべてのプリンターをエキスポートする\n"
-" -h cupsサーバー 指定の CUPS サーバーを使う\n"
-" -v 冗長にする (コマンドを表示する)\n"
-
-msgid ""
-"Usage: cupsctl [options] [param=value ... paramN=valueN]\n"
-"\n"
-"Options:\n"
-"\n"
-" -E Enable encryption\n"
-" -U username Specify username\n"
-" -h server[:port] Specify server address\n"
-"\n"
-" --[no-]debug-logging Turn debug logging on/off\n"
-" --[no-]remote-admin Turn remote administration on/off\n"
-" --[no-]remote-any Allow/prevent access from the Internet\n"
-" --[no-]remote-printers Show/hide remote printers\n"
-" --[no-]share-printers Turn printer sharing on/off\n"
-" --[no-]user-cancel-any Allow/prevent users to cancel any job\n"
-msgstr ""
-"使い方: cupsctl [オプション] [パラメータ=値 ... パラメータN=値N]\n"
-"\n"
-"オプション:\n"
-"\n"
-" -E 暗号化を有効にする\n"
-" -U ユーザ名 ユーザー名を指定する\n"
-" -h サーバー[:ポート] サーバーアドレスを指定する\n"
-"\n"
-" --[no-]debug-logging デバッグログの有効/無効を切り替える\n"
-" --[no-]remote-admin リモート管理の有効/無効を切り替える\n"
-" --[no-]remote-any インターネットからのアクセスを許可/禁止する\n"
-" --[no-]remote-printers リモートプリンターを表示/非表示にする\n"
-" --[no-]share-printers プリンター共有の有効/無効を切り替える\n"
-" --[no-]user-cancel-any あらゆるジョブのキャンセルをユーザーに許可/禁止す"
-"る\n"
-
-msgid ""
-"Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
-"\n"
-"-c config-file Load alternate configuration file\n"
-"-f Run in the foreground\n"
-"-F Run in the foreground but detach\n"
-"-h Show this usage message\n"
-"-l Run cupsd from launchd(8)\n"
+msgid "Usage: cupsaddsmb [options] printer1 ... printerN\n cupsaddsmb [options] -a\n\nOptions:\n -E Encrypt the connection to the server\n -H samba-server Use the named SAMBA server\n -U samba-user Authenticate using the named SAMBA user\n -a Export all printers\n -h cups-server Use the named CUPS server\n -v Be verbose (show commands)\n"
+msgstr "使い方: cupsaddsmb [オプション] プリンター ... プリンターN\n cupsaddsmb [オプション] -a\n\nオプション:\n -E サーバーとの接続を暗号化する\n -H sambaサーバー 指定の SAMBA サーバーを使う\n -U sambaユーザー 指定の SAMBA ユーザーを使って認証する\n -a すべてのプリンターをエキスポートする\n -h cupsサーバー 指定の CUPS サーバーを使う\n -v 冗長にする (コマンドを表示する)\n"
+msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]\n\nOptions:\n\n -E Enable encryption\n -U username Specify username\n -h server[:port] Specify server address\n\n --[no-]debug-logging Turn debug logging on/off\n --[no-]remote-admin Turn remote administration on/off\n --[no-]remote-any Allow/prevent access from the Internet\n --[no-]remote-printers Show/hide remote printers\n --[no-]share-printers Turn printer sharing on/off\n --[no-]user-cancel-any Allow/prevent users to cancel any job\n"
+msgstr "使い方: cupsctl [オプション] [パラメータ=値 ... パラメータN=値N]\n\nオプション:\n\n -E 暗号化を有効にする\n -U ユーザ名 ユーザー名を指定する\n -h サーバー[:ポート] サーバーアドレスを指定する\n\n --[no-]debug-logging デバッグログの有効/無効を切り替える\n --[no-]remote-admin リモート管理の有効/無効を切り替える\n --[no-]remote-any インターネットからのアクセスを許可/禁止する\n --[no-]remote-printers リモートプリンターを表示/非表示にする\n --[no-]share-printers プリンター共有の有効/無効を切り替える\n --[no-]user-cancel-any あらゆるジョブのキャンセルをユーザーに許可/禁止する\n"
+msgid "Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n\n-c config-file Load alternate configuration file\n-f Run in the foreground\n-F Run in the foreground but detach\n-h Show this usage message\n-l Run cupsd from launchd(8)\n"
+msgstr "使い方: cupsd [-c 設定ファイル] [-f] [-F] [-h] [-l]\n\n-c 設定ファイル 別の設定ファイルをロードする\n-f フォアグラウンドで実行する\n-F フォアグラウンドで実行するがデタッチする\n-h この使い方を表示する\n-l launchd(8) から cupsd を実行する\n"
+msgid "Usage: cupsfilter -m mime/type [ options ] filename\n\nOptions:\n\n -c cupsd.conf Set cupsd.conf file to use\n -e Use every filter from the PPD file\n -j job-id[,N] Filter file N from the specified job (default is file 1)\n -n copies Set number of copies\n -o name=value Set option(s)\n -p filename.ppd Set PPD file\n -t title Set title\n"
msgstr ""
-"使い方: cupsd [-c 設定ファイル] [-f] [-F] [-h] [-l]\n"
-"\n"
-"-c 設定ファイル 別の設定ファイルをロードする\n"
-"-f フォアグラウンドで実行する\n"
-"-F フォアグラウンドで実行するがデタッチする\n"
-"-h この使い方を表示する\n"
-"-l launchd(8) から cupsd を実行する\n"
-
-msgid ""
-"Usage: cupsfilter -m mime/type [ options ] filename\n"
-"\n"
-"Options:\n"
-"\n"
-" -c cupsd.conf Set cupsd.conf file to use\n"
-" -e Use every filter from the PPD file\n"
-" -j job-id[,N] Filter file N from the specified job (default is file 1)\n"
-" -n copies Set number of copies\n"
-" -o name=value Set option(s)\n"
-" -p filename.ppd Set PPD file\n"
-" -t title Set title\n"
-msgstr ""
-
-msgid ""
-"Usage: cupstestdsc [options] filename.ps [... filename.ps]\n"
-" cupstestdsc [options] -\n"
-"\n"
-"Options:\n"
-"\n"
-" -h Show program usage\n"
-"\n"
-" Note: this program only validates the DSC comments, not the PostScript "
-"itself.\n"
-msgstr ""
-"使い方: cupstestdsc [オプション] ファイル名.ps [... ファイル名.ps]\n"
-" cupstestdsc [オプション] -\n"
-"\n"
-"オプション:\n"
-"\n"
-" -h プログラムの使い方を表示する\n"
-"\n"
-" 注意: このプログラムは DSC コメントを検証するだけで、PostScript 自身を検"
-"証するものではありません。\n"
-
-msgid ""
-"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
-" program | cupstestppd [options] -\n"
-"\n"
-"Options:\n"
-"\n"
-" -R root-directory Set alternate root\n"
-" -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
-"translations}\n"
-" Issue warnings instead of errors\n"
-" -q Run silently\n"
-" -r Use 'relaxed' open mode\n"
-" -v Be slightly verbose\n"
-" -vv Be very verbose\n"
+msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]\n cupstestdsc [options] -\n\nOptions:\n\n -h Show program usage\n\n Note: this program only validates the DSC comments, not the PostScript itself.\n"
+msgstr "使い方: cupstestdsc [オプション] ファイル名.ps [... ファイル名.ps]\n cupstestdsc [オプション] -\n\nオプション:\n\n -h プログラムの使い方を表示する\n\n 注意: このプログラムは DSC コメントを検証するだけで、PostScript 自身を検証するものではありません。\n"
+msgid "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n program | cupstestppd [options] -\n\nOptions:\n\n -R root-directory Set alternate root\n -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}\n Issue warnings instead of errors\n -q Run silently\n -r Use 'relaxed' open mode\n -v Be slightly verbose\n -vv Be very verbose\n"
msgstr ""
-
msgid "Usage: lpmove job/src dest\n"
msgstr "使い方: lpmove ジョブ/ソース 宛先\n"
-
-msgid ""
-"Usage: lpoptions [-h server] [-E] -d printer\n"
-" lpoptions [-h server] [-E] [-p printer] -l\n"
-" lpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
-" lpoptions [-h server] [-E] -x printer\n"
-msgstr ""
-"使い方: lpoptions [-h サーバー] [-E] -d プリンター\n"
-"   lpoptions [-h サーバー] [-E] [-p プリンター] -l\n"
-" lpoptions [-h サーバー] [-E] -p プリンター -o オプション[=値] ...\n"
-" lpoptions [-h サーバー] [-E] -x プリンター\n"
-
+msgid "Usage: lpoptions [-h server] [-E] -d printer\n lpoptions [-h server] [-E] [-p printer] -l\n lpoptions [-h server] [-E] -p printer -o option[=value] ...\n lpoptions [-h server] [-E] -x printer\n"
+msgstr "使い方: lpoptions [-h サーバー] [-E] -d プリンター\n   lpoptions [-h サーバー] [-E] [-p プリンター] -l\n lpoptions [-h サーバー] [-E] -p プリンター -o オプション[=値] ...\n lpoptions [-h サーバー] [-E] -x プリンター\n"
msgid "Usage: lppasswd [-g groupname]\n"
msgstr "使い方: lppasswd [-g グループ名]\n"
-
-msgid ""
-"Usage: lppasswd [-g groupname] [username]\n"
-" lppasswd [-g groupname] -a [username]\n"
-" lppasswd [-g groupname] -x [username]\n"
-msgstr ""
-"使い方: lppasswd [-g グループ名] [ユーザ名]\n"
-" lppasswd [-g グループ名] -a [ユーザ名]\n"
-" lppasswd [-g グループ名] -x [ユーザ名]\n"
-
-msgid ""
-"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
-msgstr ""
-"使い方: lpq [-P 宛先] [-U ユーザー名] [-h ホスト名[:ポート]] [-l] [+間隔]\n"
-
-msgid ""
-"Usage: ppdc [options] filename.drv [ ... filenameN.drv ]\n"
-"Options:\n"
-" -D name=value Set named variable to value.\n"
-" -I include-dir Add include directory to search path.\n"
-" -c catalog.po Load the specified message catalog.\n"
-" -d output-dir Specify the output directory.\n"
-" -l lang[,lang,...] Specify the output language(s) (locale).\n"
-" -m Use the ModelName value as the filename.\n"
-" -t Test PPDs instead of generating them.\n"
-" -v Be verbose (more v's for more verbosity).\n"
-" -z Compress PPD files using GNU zip.\n"
-" --cr End lines with CR (Mac OS 9).\n"
-" --crlf End lines with CR + LF (Windows).\n"
-" --lf End lines with LF (UNIX/Linux/Mac OS X).\n"
-msgstr ""
-"Usage: ppdc [オプション] ファイル名.drv [ ... ファイル名N.drv ]\n"
-"オプション:\n"
-" -D 変数名=値 変数名で指定した変数に値をセットする\n"
-" -I include-dir include-dir で指定したディレクトリをサーチパスに追加\n"
-" -c catalog.po 指定したメッセージカタログをロードする\n"
-" -d output-dir 出力ディレクトリ(output-dir)を指定する\n"
-" -l lang[,lang,...] 出力言語を指定する。(複数可能)\n"
-" -m ModelName の値をファイル名として使用する\n"
-" -t PPD を出力しないでテストする\n"
-" -v 冗長出力を行う (v を追加してさらに冗長に)\n"
-" -z PPD ファイルを GNU zip を使って圧縮する\n"
-" --cr ラインの最後は CR (Mac OS 9 方式).\n"
-" --crlf ラインの最後は CR + LF (Windows 方式).\n"
-" --lf ラインの最後は LF (UNIX/Linux/Mac OS X 方式).\n"
-
-msgid ""
-"Usage: ppdhtml [options] filename.drv >filename.html\n"
-" -D name=value Set named variable to value.\n"
-"Options:\n"
-" -I include-dir Add include directory to search path.\n"
-msgstr ""
-"使い方: ppdhtml [オプション] ファイル名.drv >ファイル名.html\n"
-" -D 変数名=値 変数名で指定した変数に値をセットする\n"
-"オプション:\n"
-" -I include-dir include-dir で指定したディレクトリをサーチパスに追加\n"
-
-msgid ""
-"Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]\n"
-"Options:\n"
-" -I include-dir\n"
-" -o filename.drv\n"
-msgstr ""
-"使い方: ppdi [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\n"
-"オプション:\n"
-" -I インクルードディレクトリ\n"
-" -o ファイル名.drv\n"
-
-msgid ""
-"Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]\n"
-"Options:\n"
-" -o filename.ppd[.gz]\n"
-msgstr ""
-"使い方: ppdmerge [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\n"
-"オプション:\n"
-" -o ファイル名.ppd[.gz]\n"
-
-msgid ""
-"Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]\n"
-"Options:\n"
-" -D name=value Set named variable to value.\n"
-" -I include-dir Add include directory to search path.\n"
-" -v Be verbose (more v's for more verbosity).\n"
-msgstr ""
-"使い方: ppdpo [オプション] -o ファイル名.po ファイル名.drv [ ... ファイル名N."
-"drv ]\n"
-"オプション:\n"
-" -D 変数名=値 変数名で指定した変数に値をセットする\n"
-" -I include-dir include-dir で指定したディレクトリをサーチパスに追加\n"
-" -v 冗長出力を行う (v を追加してさらに冗長に)\n"
-
+msgid "Usage: lppasswd [-g groupname] [username]\n lppasswd [-g groupname] -a [username]\n lppasswd [-g groupname] -x [username]\n"
+msgstr "使い方: lppasswd [-g グループ名] [ユーザ名]\n lppasswd [-g グループ名] -a [ユーザ名]\n lppasswd [-g グループ名] -x [ユーザ名]\n"
+msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+msgstr "使い方: lpq [-P 宛先] [-U ユーザー名] [-h ホスト名[:ポート]] [-l] [+間隔]\n"
+msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]\nOptions:\n -D name=value Set named variable to value.\n -I include-dir Add include directory to search path.\n -c catalog.po Load the specified message catalog.\n -d output-dir Specify the output directory.\n -l lang[,lang,...] Specify the output language(s) (locale).\n -m Use the ModelName value as the filename.\n -t Test PPDs instead of generating them.\n -v Be verbose (more v's for more verbosity).\n -z Compress PPD files using GNU zip.\n --cr End lines with CR (Mac OS 9).\n --crlf End lines with CR + LF (Windows).\n --lf End lines with LF (UNIX/Linux/Mac OS X).\n"
+msgstr "Usage: ppdc [オプション] ファイル名.drv [ ... ファイル名N.drv ]\nオプション:\n -D 変数名=値 変数名で指定した変数に値をセットする\n -I include-dir include-dir で指定したディレクトリをサーチパスに追加\n -c catalog.po 指定したメッセージカタログをロードする\n -d output-dir 出力ディレクトリ(output-dir)を指定する\n -l lang[,lang,...] 出力言語を指定する。(複数可能)\n -m ModelName の値をファイル名として使用する\n -t PPD を出力しないでテストする\n -v 冗長出力を行う (v を追加してさらに冗長に)\n -z PPD ファイルを GNU zip を使って圧縮する\n --cr ラインの最後は CR (Mac OS 9 方式).\n --crlf ラインの最後は CR + LF (Windows 方式).\n --lf ラインの最後は LF (UNIX/Linux/Mac OS X 方式).\n"
+msgid "Usage: ppdhtml [options] filename.drv >filename.html\n -D name=value Set named variable to value.\nOptions:\n -I include-dir Add include directory to search path.\n"
+msgstr "使い方: ppdhtml [オプション] ファイル名.drv >ファイル名.html\n -D 変数名=値 変数名で指定した変数に値をセットする\nオプション:\n -I include-dir include-dir で指定したディレクトリをサーチパスに追加\n"
+msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n -I include-dir\n -o filename.drv\n"
+msgstr "使い方: ppdi [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\nオプション:\n -I インクルードディレクトリ\n -o ファイル名.drv\n"
+msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n -o filename.ppd[.gz]\n"
+msgstr "使い方: ppdmerge [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\nオプション:\n -o ファイル名.ppd[.gz]\n"
+msgid "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]\nOptions:\n -D name=value Set named variable to value.\n -I include-dir Add include directory to search path.\n -v Be verbose (more v's for more verbosity).\n"
+msgstr "使い方: ppdpo [オプション] -o ファイル名.po ファイル名.drv [ ... ファイル名N.drv ]\nオプション:\n -D 変数名=値 変数名で指定した変数に値をセットする\n -I include-dir include-dir で指定したディレクトリをサーチパスに追加\n -v 冗長出力を行う (v を追加してさらに冗長に)\n"
msgid "Usage: snmp [host-or-ip-address]\n"
msgstr "使い方: snmp [ホストまたはIPアドレス]\n"
-
msgid "Value uses indefinite length"
msgstr "値は不定長です"
-
msgid "VarBind uses indefinite length"
msgstr "VarBind は不定長です"
-
msgid "Version uses indefinite length"
msgstr "Version は不定長です"
-
-#, c-format
msgid "WARNING: Adding only the first %d printers found"
msgstr "WARNING: 発見した順番に %d 台のプリンターだけ追加します"
-
-#, c-format
msgid "WARNING: Boolean expected for waiteof option \"%s\"\n"
msgstr "WARNING: 論理値は、waiteof オプション \"%s\" であるべきです\n"
-
msgid "WARNING: Failed to read side-channel request!\n"
msgstr "WARNING: サイドチャンネルの読み出しに失敗しました!\n"
-
-#, c-format
msgid "WARNING: Option \"%s\" cannot be included via IncludeFeature!\n"
-msgstr ""
-"WARNING: オプション \"%s\" は IncludeFeature 経由で含めることはできません!\n"
-
+msgstr "WARNING: オプション \"%s\" は IncludeFeature 経由で含めることはできません!\n"
msgid "WARNING: Printer not responding\n"
msgstr "WARNING: プリンターが反応しません\n"
-
msgid "WARNING: Printer sent unexpected EOF\n"
msgstr "WARNING: プリンターが意図しない EOF を返しました\n"
-
-#, c-format
-msgid ""
-"WARNING: Remote host did not respond with command status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: リモートホストは %d 秒経ってもコマンド・ステータス・バイトを返しませ"
-"んでした!\n"
-
-#, c-format
-msgid ""
-"WARNING: Remote host did not respond with control status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: リモートホストは %d 秒経ってもコントロール・ステータス・バイトを返し"
-"ませんでした!\n"
-
-#, c-format
-msgid ""
-"WARNING: Remote host did not respond with data status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: リモートホストは %d 秒経ってもデータ・ステータス・バイトを返しません"
-"でした!\n"
-
-#, c-format
+msgid "WARNING: Remote host did not respond with command status byte after %d seconds!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもコマンド・ステータス・バイトを返しませんでした!\n"
+msgid "WARNING: Remote host did not respond with control status byte after %d seconds!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもコントロール・ステータス・バイトを返しませんでした!\n"
+msgid "WARNING: Remote host did not respond with data status byte after %d seconds!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもデータ・ステータス・バイトを返しませんでした!\n"
msgid "WARNING: SCSI command timed out (%d); retrying...\n"
msgstr "WARNING: SCSI コマンドはタイムアウトしました (%d)。再試行中...\n"
-
-msgid ""
-"WARNING: This document does not conform to the Adobe Document Structuring "
-"Conventions and may not print correctly!\n"
-msgstr ""
-"WARNING: この書類は Adobe Document Structuring Conventions に適合しておらず、"
-"正しくプリントできない可能性があります!\n"
-
-#, c-format
+msgid "WARNING: This document does not conform to the Adobe Document Structuring Conventions and may not print correctly!\n"
+msgstr "WARNING: この書類は Adobe Document Structuring Conventions に適合しておらず、正しくプリントできない可能性があります!\n"
msgid "WARNING: Unable to open \"%s:%s\": %s\n"
msgstr "WARNING: \"%s:%s\": %s を開けません\n"
-
msgid "WARNING: Unable to send PAP status request"
msgstr "WARNING: PAP ステータス・リクエストを送信できません"
-
-#, c-format
msgid "WARNING: Unexpected PAP packet of type %d\n"
msgstr "WARNING: %d タイプの意図しない PAP パケット\n"
-
-#, c-format
msgid "WARNING: Unknown PAP packet of type %d\n"
msgstr "WARNING: 未知の PAP パケットのタイプ %d\n"
-
-#, c-format
msgid "WARNING: Unknown choice \"%s\" for option \"%s\"!\n"
msgstr "WARNING: \"%s\" (オプション \"%s\" 用) は未知の設定です!\n"
-
-#, c-format
msgid "WARNING: Unknown option \"%s\"!\n"
msgstr "WARNING: \"%s\" は未知のオプションです!\n"
-
-#, c-format
msgid "WARNING: Unsupported baud rate %s!\n"
msgstr "WARNING: %s はサポートしないボーレートです!\n"
-
-#, c-format
msgid "WARNING: number expected for status option \"%s\"\n"
msgstr "WARNING: ステータス・オプションの期待値は \"%s\"\n"
-
-#, c-format
-msgid ""
-"WARNING: recoverable: Network host '%s' is busy; will retry in %d "
-"seconds...\n"
-msgstr ""
-"WARNING: 回復可能: ネットワークホスト '%s' はビジー状態です (%d 秒後に再試行"
-"します...)\n"
-
+msgid "WARNING: recoverable: Network host '%s' is busy; will retry in %d seconds...\n"
+msgstr "WARNING: 回復可能: ネットワークホスト '%s' はビジー状態です (%d 秒後に再試行します...)\n"
msgid "Warning, no Windows 2000 printer drivers are installed!"
msgstr "警告、Windows 2000 プリンタードライバーがインストールされていません!"
-
msgid "Yes"
msgstr "はい"
-
-#, c-format
-msgid ""
-"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%"
-"s:%d%s</A>."
-msgstr ""
-"このページには URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> を使ってア"
-"クセスする必要があります。"
-
+msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+msgstr "このページには URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> を使ってアクセスする必要があります。"
msgid "You4 Envelope"
msgstr "洋形 4 号"
-
msgid "ZPL Label Printer"
msgstr "ZPL ラベル・プリンター"
-
msgid "Zebra"
msgstr "ゼブラ"
-
msgid "aborted"
msgstr "停止"
-
msgid "canceled"
msgstr "キャンセル"
-
msgid "completed"
msgstr "完了"
-
msgid "convert: Use the -f option to specify a file to convert.\n"
-msgstr ""
-"convert: 変換するファイルを指定するには、-f オプションを使ってください。\n"
-
+msgstr "convert: 変換するファイルを指定するには、-f オプションを使ってください。\n"
msgid "cups-deviced failed to execute."
msgstr "cups-deviced の実行に失敗しました。"
-
msgid "cups-driverd failed to execute."
msgstr "cups-driverd の実行に失敗しました。"
-
-#, c-format
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
msgstr "cupsaddsmb: プリンター \"%s\" の PPD ファイルがありません - %s\n"
-
-#, c-format
msgid "cupsctl: Unable to connect to server: %s\n"
msgstr "cupsctl: サーバー: %s に接続できません\n"
-
-#, c-format
msgid "cupsctl: Unknown option \"%s\"!\n"
msgstr "cupsctl: \"%s\" は未知のオプションです!\n"
-
-#, c-format
msgid "cupsctl: Unknown option \"-%c\"!\n"
msgstr "cupsctl: \"-%c\"は未知のオプションです!\n"
-
msgid "cupsd: Expected config filename after \"-c\" option!\n"
msgstr "cupsd: -c オプションのあとには設定ファイル名が必要です!\n"
-
msgid "cupsd: Unable to get current directory!\n"
msgstr "cupsd: カレント・ディレクトリを取得できません!\n"
-
-#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
msgstr "cupsd: \"%s\" は未知の引数です - 停止します!\n"
-
-#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting!\n"
msgstr "cupsd: \"%c\" は未知のオプションです - 停止します!\n"
-
msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
-msgstr ""
-"cupsd: launchd(8) サポートがコンパイルされていないので、通常モードで動作しま"
-"す。\n"
-
-#, c-format
+msgstr "cupsd: launchd(8) サポートがコンパイルされていないので、通常モードで動作します。\n"
msgid "cupsfilter: Invalid document number %d!\n"
msgstr "cupsfilter: 不正な文書番号 %d です!\n"
-
-#, c-format
msgid "cupsfilter: Invalid job ID %d!\n"
msgstr "cupsfilter: 不正なジョブID %d です!\n"
-
msgid "cupsfilter: Only one filename can be specified!\n"
msgstr "cupsfilter: ひとつのファイル名のみを指定できます!\n"
-
-#, c-format
msgid "cupsfilter: Unable to get job file - %s\n"
msgstr "cupsfilter: ジョブ・ファイルを取得できません - %s\n"
-
msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
msgstr "cupstestppd: -q オプションは -v オプションと両立できません。\n"
-
msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
msgstr "cupstestppd: -v オプションは -q オプションと両立できません。\n"
-
-#, c-format
msgid "device for %s/%s: %s\n"
msgstr "%s/%s のデバイス: %s\n"
-
-#, c-format
msgid "device for %s: %s\n"
msgstr "%s のデバイス: %s\n"
-
msgid "error-index uses indefinite length"
msgstr "エラー・インデックスは不定長です"
-
msgid "error-status uses indefinite length"
msgstr "エラー・ステータスは不定長です"
-
msgid "held"
msgstr "ホールド"
-
msgid "help\t\tget help on commands\n"
msgstr "help\t\tコマンドのヘルプを取得\n"
-
msgid "idle"
msgstr "待機中"
-
msgid "job-printer-uri attribute missing!"
msgstr "job-printer-uri 属性がありません!"
-
msgid "lpadmin: Class name can only contain printable characters!\n"
msgstr "lpadmin: クラス名は表示可能文字のみで構成されなければなりません!\n"
-
msgid "lpadmin: Expected PPD after '-P' option!\n"
msgstr "lpadmin: '-P' オプションのあとに PPD が必要です!\n"
-
msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
-msgstr ""
-"lpadmin: '-u' オプションのあとには allow/deny:ユーザリスト が必要です!\n"
-
+msgstr "lpadmin: '-u' オプションのあとには allow/deny:ユーザリスト が必要です!\n"
msgid "lpadmin: Expected class after '-r' option!\n"
msgstr "lpadmin: '-r' オプションのあとにはクラス名が必要です!\n"
-
msgid "lpadmin: Expected class name after '-c' option!\n"
msgstr "lpadmin: '-c' オプションのあとにはクラス名が必要です!\n"
-
msgid "lpadmin: Expected description after '-D' option!\n"
msgstr "lpadmin: '-D' オプションのあとに説明が必要です!\n"
-
msgid "lpadmin: Expected device URI after '-v' option!\n"
msgstr "lpadmin: '-v' オプションのあとにはデバイス URI が必要です!\n"
-
msgid "lpadmin: Expected file type(s) after '-I' option!\n"
msgstr "lpadmin: '-I' オプションのあとにファイル形式が必要です!\n"
-
msgid "lpadmin: Expected hostname after '-h' option!\n"
msgstr "lpadmin: '-h' オプションのあとにはホスト名が必要です!\n"
-
msgid "lpadmin: Expected interface after '-i' option!\n"
msgstr "lpadmin: '-i' オプションのあとにはインターフェイス名が必要です!\n"
-
msgid "lpadmin: Expected location after '-L' option!\n"
msgstr "lpadmin: '-L' オプションのあとに場所が必要です!\n"
-
msgid "lpadmin: Expected model after '-m' option!\n"
msgstr "lpadmin: '-m' オプションのあとにはモデル名が必要です!\n"
-
msgid "lpadmin: Expected name=value after '-o' option!\n"
msgstr "lpadmin: '-o' オプションのあとには 変数名=値 が必要です!\n"
-
msgid "lpadmin: Expected printer after '-p' option!\n"
msgstr "lpadmin: '-p' オプションのあとにはプリンター名が必要です!\n"
-
msgid "lpadmin: Expected printer name after '-d' option!\n"
msgstr "lpadmin: '-d' オプションのあとにはプリンター名が必要です!\n"
-
msgid "lpadmin: Expected printer or class after '-x' option!\n"
-msgstr ""
-"lpadmin: '-x' オプションのあとにはプリンター名またはクラス名が必要です!\n"
-
+msgstr "lpadmin: '-x' オプションのあとにはプリンター名またはクラス名が必要です!\n"
msgid "lpadmin: No member names were seen!\n"
msgstr "lpadmin: メンバー名が見当たりません!\n"
-
-#, c-format
msgid "lpadmin: Printer %s is already a member of class %s.\n"
msgstr "lpadmin: プリンター %s はすでにクラス %s のメンバーです。\n"
-
-#, c-format
msgid "lpadmin: Printer %s is not a member of class %s.\n"
msgstr "lpadmin: プリンター %s はクラス %s のメンバーではありません。\n"
-
msgid "lpadmin: Printer name can only contain printable characters!\n"
msgstr "lpadmin: プリンター名には印字可能な文字のみ使用できます!\n"
-
-msgid ""
-"lpadmin: Unable to add a printer to the class:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: クラスにプリンターを追加できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-#, c-format
+msgid "lpadmin: Unable to add a printer to the class:\n You must specify a printer name first!\n"
+msgstr "lpadmin: クラスにプリンターを追加できません:\n 先にプリンター名を指定する必要があります!\n"
msgid "lpadmin: Unable to connect to server: %s\n"
msgstr "lpadmin: サーバーに接続できません: %s\n"
-
-#, c-format
msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
msgstr "lpadmin: PPD ファイル \"%s\" を開けません - %s\n"
-
-#, c-format
msgid "lpadmin: Unable to open file \"%s\": %s\n"
msgstr "lpadmin: ファイル \"%s\" を開けません: %s\n"
-
-msgid ""
-"lpadmin: Unable to remove a printer from the class:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: クラスからプリンターを削除できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the PPD file:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: PPD ファイルを設定できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the device URI:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: デバイス URI を設定できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the interface script or PPD file:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: インターフェイス・スクリプトまたは PPD ファイルを設定できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the interface script:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: インターフェイススクリプトを設定できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the printer description:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: プリンターの説明を設定できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the printer location:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: プリンターの場所が設定できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the printer options:\n"
-" You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: プリンター・オプションを設定できません:\n"
-" 先にプリンター名を指定する必要があります!\n"
-
-#, c-format
+msgid "lpadmin: Unable to remove a printer from the class:\n You must specify a printer name first!\n"
+msgstr "lpadmin: クラスからプリンターを削除できません:\n 先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the PPD file:\n You must specify a printer name first!\n"
+msgstr "lpadmin: PPD ファイルを設定できません:\n 先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the device URI:\n You must specify a printer name first!\n"
+msgstr "lpadmin: デバイス URI を設定できません:\n 先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the interface script or PPD file:\n You must specify a printer name first!\n"
+msgstr "lpadmin: インターフェイス・スクリプトまたは PPD ファイルを設定できません:\n 先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the interface script:\n You must specify a printer name first!\n"
+msgstr "lpadmin: インターフェイススクリプトを設定できません:\n 先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the printer description:\n You must specify a printer name first!\n"
+msgstr "lpadmin: プリンターの説明を設定できません:\n 先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the printer location:\n You must specify a printer name first!\n"
+msgstr "lpadmin: プリンターの場所が設定できません:\n 先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the printer options:\n You must specify a printer name first!\n"
+msgstr "lpadmin: プリンター・オプションを設定できません:\n 先にプリンター名を指定する必要があります!\n"
msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
msgstr "lpadmin:\"%s\" は未知の allow/deny オプションです!\n"
-
-#, c-format
msgid "lpadmin: Unknown argument '%s'!\n"
msgstr "lpadmin: '%s' は未知の引数です!\n"
-
-#, c-format
msgid "lpadmin: Unknown option '%c'!\n"
msgstr "lpadmin: '%c' は未知のオプションです!\n"
-
msgid "lpadmin: Warning - content type list ignored!\n"
msgstr "lpadmin: 警告 - コンテンツタイプリストは無視されます!\n"
-
msgid "lpc> "
msgstr "lpc> "
-
msgid "lpinfo: Expected 1284 device ID string after --device-id!\n"
-msgstr ""
-"lpinfo: --device-id の後には、1284デバイスIDを指定する必要があります!\n"
-
+msgstr "lpinfo: --device-id の後には、1284デバイスIDを指定する必要があります!\n"
msgid "lpinfo: Expected language after --language!\n"
msgstr "lpinfo: --language の後には、言語を指定する必要があります!\n"
-
msgid "lpinfo: Expected make and model after --make-and-model!\n"
-msgstr ""
-"lpinfo: --make-and-model の後には、メーカーとモデルを指定する必要がありま"
-"す!\n"
-
+msgstr "lpinfo: --make-and-model の後には、メーカーとモデルを指定する必要があります!\n"
msgid "lpinfo: Expected product string after --product!\n"
msgstr "lpinfo: --product の後には、製品名を指定する必要があります!\n"
-
msgid "lpinfo: Expected scheme list after --exclude-schemes!\n"
-msgstr ""
-"lpinfo: --exclude-schemes の後には、スキーマ・リストを指定する必要がありま"
-"す!\n"
-
+msgstr "lpinfo: --exclude-schemes の後には、スキーマ・リストを指定する必要があります!\n"
msgid "lpinfo: Expected scheme list after --include-schemes!\n"
-msgstr ""
-"lpinfo: --include-schemes の後には、スキーマ・リストを指定する必要がありま"
-"す!\n"
-
+msgstr "lpinfo: --include-schemes の後には、スキーマ・リストを指定する必要があります!\n"
msgid "lpinfo: Expected timeout after --timeout!\n"
msgstr "lpinfo: --timeout の後には、タイムアウト値を指定する必要があります!\n"
-
-#, c-format
msgid "lpinfo: Unknown argument '%s'!\n"
msgstr "lpinfo: 未知の引数 '%s'!\n"
-
-#, c-format
msgid "lpinfo: Unknown option '%c'!\n"
msgstr "lpinfo: 未知のオプション '%c'!\n"
-
-#, c-format
msgid "lpinfo: Unknown option '%s'!\n"
msgstr "lpinfo: 未知のオプション '%s'!\n"
-
-#, c-format
msgid "lpmove: Unable to connect to server: %s\n"
msgstr "lpmove: サーバーに接続できません: %s!\n"
-
-#, c-format
msgid "lpmove: Unknown argument '%s'!\n"
msgstr "lpmove: 未知の引数 '%s'!\n"
-
-#, c-format
msgid "lpmove: Unknown option '%c'!\n"
msgstr "lpmove: 未知のオプション '%c'!\n"
-
msgid "lpoptions: No printers!?!\n"
msgstr "lpoptions: プリンターがありません!?!\n"
-
-#, c-format
msgid "lpoptions: Unable to add printer or instance: %s\n"
msgstr "lpoptions: プリンターまたはインスタンスを追加できません: %s\n"
-
-#, c-format
msgid "lpoptions: Unable to get PPD file for %s: %s\n"
msgstr "lpoptions: %s の PPD ファイルを開けません!: %s\n"
-
-#, c-format
msgid "lpoptions: Unable to open PPD file for %s!\n"
msgstr "lpoptions: %s の PPD ファイルを開けません!\n"
-
msgid "lpoptions: Unknown printer or class!\n"
msgstr "lpoptions: 未知のプリンターまたはクラスです!\n"
-
msgid "lppasswd: Only root can add or delete passwords!\n"
msgstr "lppasswd: root だけがパスワードの追加と削除を行えます!\n"
-
msgid "lppasswd: Password file busy!\n"
msgstr "lppasswd: パスワードファイルがビジー状態です!\n"
-
msgid "lppasswd: Password file not updated!\n"
msgstr "lppasswd: パスワードファイルは更新されません!\n"
-
msgid "lppasswd: Sorry, password doesn't match!\n"
msgstr "lppasswd: すみませんが、パスワードがマッチしません!\n"
-
-msgid ""
-"lppasswd: Sorry, password rejected.\n"
-"Your password must be at least 6 characters long, cannot contain\n"
-"your username, and must contain at least one letter and number.\n"
-msgstr ""
-"lppasswd: すみませんが、パスワードは拒否されました。\n"
-"パスワードは少なくとも 6 文字以上で、あなたのユーザー名を含んではならず、\n"
-"少なくとも 1 つの英字および数値を含んでなければなりません。\n"
-
+msgid "lppasswd: Sorry, password rejected.\nYour password must be at least 6 characters long, cannot contain\nyour username, and must contain at least one letter and number.\n"
+msgstr "lppasswd: すみませんが、パスワードは拒否されました。\nパスワードは少なくとも 6 文字以上で、あなたのユーザー名を含んではならず、\n少なくとも 1 つの英字および数値を含んでなければなりません。\n"
msgid "lppasswd: Sorry, passwords don't match!\n"
msgstr "lppasswd: すみませんが、パスワードがマッチしません!\n"
-
-#, c-format
msgid "lppasswd: Unable to copy password string: %s\n"
msgstr "lppasswd: パスワード文字列をコピーできません: %s\n"
-
-#, c-format
msgid "lppasswd: Unable to open password file: %s\n"
msgstr "lppasswd: パスワードファイルを開けません: %s\n"
-
-#, c-format
msgid "lppasswd: Unable to write to password file: %s\n"
msgstr "lppasswd: パスワードファイルに書き込めません: %s\n"
-
-#, c-format
msgid "lppasswd: failed to backup old password file: %s\n"
msgstr "lppasswd: 古いパスワードファイルのバックアップに失敗しました: %s\n"
-
-#, c-format
msgid "lppasswd: failed to rename password file: %s\n"
msgstr "lppasswd: パスワードファイルの名前の変更に失敗しました: %s\n"
-
-#, c-format
msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
msgstr "lppasswd: ユーザー \"%s\" およびグループ \"%s\" は存在しません。\n"
-
-#, c-format
-msgid ""
-"lpstat: error - %s environment variable names non-existent destination \"%s"
-"\"!\n"
-msgstr ""
-"lpstat: エラー - 環境変数 %s が、存在しない宛先 \"%s\" を指しています!\n"
-
-#, c-format
+msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpstat: エラー - 環境変数 %s が、存在しない宛先 \"%s\" を指しています!\n"
msgid "members of class %s:\n"
msgstr "クラス %s のメンバー:\n"
-
msgid "no entries\n"
msgstr "エントリーがありません\n"
-
msgid "no system default destination\n"
msgstr "システムのデフォルトの宛先がありません\n"
-
msgid "notify-events not specified!"
msgstr "notify-events が指定されていません!"
-
-#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used!"
msgstr "notify-recipient-uri URI \"%s\" はすでに使われています!"
-
-#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme!"
msgstr "notify-recipient-uri URI \"%s\" には未知のスキームが使われています!"
-
-#, c-format
msgid "notify-subscription-id %d no good!"
msgstr "notify-subscription-id %d は良くありません!"
-
msgid "pending"
msgstr "保留"
-
-#, c-format
msgid "ppdc: Adding include directory \"%s\"...\n"
msgstr "ppdc: ディレクトリー \"%s\" を追加しています...\n"
-
-#, c-format
msgid "ppdc: Adding/updating UI text from %s...\n"
msgstr "ppdc: %s から UI テキストを追加または更新しています...\n"
-
-#, c-format
msgid "ppdc: Bad boolean value (%s) on line %d of %s.\n"
msgstr "ppdc: 不正な boolean 値 (%s) があります。%d 行目、ファイル名 %s。\n"
-
-#, c-format
msgid "ppdc: Bad resolution name \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: 不正な resolution 名 \"%s\" があります。%d 行目、ファイル名 %s !\n"
-
-#, c-format
+msgstr "ppdc: 不正な resolution 名 \"%s\" があります。%d 行目、ファイル名 %s !\n"
msgid "ppdc: Bad status keyword %s on line %d of %s!\n"
-msgstr ""
-"ppdc: 不正な status キーワード %s があります。%d 行目、ファイル名 %s !\n"
-
-#, c-format
+msgstr "ppdc: 不正な status キーワード %s があります。%d 行目、ファイル名 %s !\n"
msgid "ppdc: Bad variable substitution ($%c) on line %d of %s.\n"
msgstr "ppdc: 不正な数値置換 ($%c) があります。%d 行目、ファイル名 %s。\n"
-
-#, c-format
msgid "ppdc: Choice found on line %d of %s with no Option!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s で、Option がないのに Choice が見つかりました!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s で、Option がないのに Choice が見つかりました!\n"
msgid "ppdc: Duplicate #po for locale %s on line %d of %s!\n"
-msgstr ""
-"ppdc: locale %s に対して #po が2重に定義されています。%d 行目、ファイル名 %"
-"s !\n"
-
-#, c-format
+msgstr "ppdc: locale %s に対して #po が2重に定義されています。%d 行目、ファイル名 %s !\n"
msgid "ppdc: Expected a filter definition on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s においてフィルター定義が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected a program name on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s においてプログラム名が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected boolean value on line %d of %s.\n"
msgstr "ppdc: %d 行目、ファイル名 %s において boolean 値が必要です。\n"
-
-#, c-format
msgid "ppdc: Expected charset after Font on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Font の後に charset が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に charset が必要です!\n"
msgid "ppdc: Expected choice code on line %d of %s.\n"
msgstr "ppdc: %d 行目、ファイル名 %s において choice code が必要です。\n"
-
-#, c-format
msgid "ppdc: Expected choice name/text on line %d of %s.\n"
msgstr "ppdc: %d 行目、ファイル名 %s において choice name/text が必要です。\n"
-
-#, c-format
msgid "ppdc: Expected color order for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する color order が必要"
-"です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する color order が必要です!\n"
msgid "ppdc: Expected colorspace for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する colorspace が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する colorspace が必要です!\n"
msgid "ppdc: Expected compression for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する compression が必要"
-"です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する compression が必要です!\n"
msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において UIConstraints に対する constraint が必"
-"要です!\n"
-
-#, c-format
-msgid ""
-"ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において DriverType の後に driver type keyword "
-"が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において UIConstraints に対する constraint が必要です!\n"
+msgid "ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において DriverType の後に driver type keyword が必要です!\n"
msgid "ppdc: Expected duplex type after Duplex on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において Duplex の後に type が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected encoding after Font on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Font の後に encoding が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に encoding が必要です!\n"
msgid "ppdc: Expected filename after #po %s on line %d of %s!\n"
msgstr "ppdc: #po %s の後にファイル名が必要です! (%d 行目, ファイル %s)\n"
-
-#, c-format
msgid "ppdc: Expected group name/text on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において group name/text が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected include filename on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において include ファイル名が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected integer on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において整数指定が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected locale after #po on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において #po の後に locale が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected name after %s on line %d of %s!\n"
msgstr "ppdc: %s の後に name が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Expected name after FileName on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において FileName の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において FileName の後に name が必要です!\n"
msgid "ppdc: Expected name after Font on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に name が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected name after Manufacturer on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Manufacturer の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Manufacturer の後に name が必要です!\n"
msgid "ppdc: Expected name after MediaSize on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において MediaSize の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において MediaSize の後に name が必要です!\n"
msgid "ppdc: Expected name after ModelName on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ModelName の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ModelName の後に name が必要です!\n"
msgid "ppdc: Expected name after PCFileName on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において PCFileName の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において PCFileName の後に name が必要です!\n"
msgid "ppdc: Expected name/text after %s on line %d of %s!\n"
msgstr "ppdc: %s の後に name/text が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Expected name/text after Installable on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Installable の後に name/text が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Installable の後に name/text が必要です!\n"
msgid "ppdc: Expected name/text after Resolution on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Resolution の後に name/text が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Resolution の後に name/text が必要です!\n"
msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する name/text が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する name/text が必要です!\n"
msgid "ppdc: Expected option name/text on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において option name/text が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected option section on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において option section が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected option type on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において option type が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected override field after Resolution on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Resolution の後に override field が必要"
-"です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Resolution の後に override field が必要です!\n"
msgid "ppdc: Expected real number on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において実数が必要です!\n"
-
-#, c-format
-msgid ""
-"ppdc: Expected resolution/mediatype following ColorProfile on line %d of %"
-"s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorProfile に続いて resolution/"
-"mediatype が必要です!\n"
-
-#, c-format
-msgid ""
-"ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
-"of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において SimpleColorProfile に続いて resolution/"
-"mediatype が必要です!\n"
-
-#, c-format
+msgid "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorProfile に続いて resolution/mediatype が必要です!\n"
+msgid "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において SimpleColorProfile に続いて resolution/mediatype が必要です!\n"
msgid "ppdc: Expected selector after %s on line %d of %s!\n"
msgstr "ppdc: %s の後に selector が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Expected status after Font on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に status が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected string after Copyright on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Copyright の後に文字列が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Copyright の後に文字列が必要です!\n"
msgid "ppdc: Expected string after Version on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Version の後に文字列が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Version の後に文字列が必要です!\n"
msgid "ppdc: Expected two option names on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において 2 つのオプション名が必要です!\n"
-
-#, c-format
msgid "ppdc: Expected value after %s on line %d of %s!\n"
msgstr "ppdc: %s の後に value が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Expected version after Font on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Font の後に version が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に version が必要です!\n"
msgid "ppdc: Invalid #include/#po filename \"%s\"!\n"
msgstr "ppdc: 無効な #include/#po ファイル名です \"%s\"!\n"
-
-#, c-format
msgid "ppdc: Invalid cost for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な cost がありま"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な cost があります!\n"
msgid "ppdc: Invalid empty MIME type for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の MIME type "
-"があります!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の MIME type があります!\n"
msgid "ppdc: Invalid empty program name for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の program "
-"name があります!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の program name があります!\n"
msgid "ppdc: Invalid option section \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s!\n"
msgid "ppdc: Invalid option type \"%s\" on line %d of %s!\n"
msgstr "ppdc: 無効な option type があります \"%s\"。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Loading driver information file \"%s\"...\n"
msgstr "ppdc: ドライバー情報ファイル \"%s\" を読み込んでいます...\n"
-
-#, c-format
msgid "ppdc: Loading messages for locale \"%s\"...\n"
msgstr "ppdc: ロケール \"%s\" のメッセージを読み込んでいます...\n"
-
-#, c-format
msgid "ppdc: Loading messages from \"%s\"...\n"
msgstr "ppdc: \"%s\" からメッセージを読み込んでいます...\n"
-
-#, c-format
msgid "ppdc: Missing #endif at end of \"%s\"!\n"
msgstr "ppdc: \"%s\" の最後に #endif が見つかりません!\n"
-
-#, c-format
msgid "ppdc: Missing #if on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において #if が見つかりません!\n"
-
-#, c-format
msgid "ppdc: No message catalog provided for locale %s!\n"
msgstr "ppdc: ロケール %s に対するメッセージカタログが見つかりません!\n"
-
-#, c-format
msgid "ppdc: Option %s redefined with a different type on line %d of %s!\n"
-msgstr ""
-"ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s!\n"
msgid "ppdc: Option constraint must *name on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Option constraint は *name で指定しま"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Option constraint は *name で指定します!\n"
msgid "ppdc: Too many nested #if's on line %d of %s!\n"
msgstr "ppdc: %d 行目、ファイル名 %s において #if のネストが多すぎます!\n"
-
-#, c-format
msgid "ppdc: Unable to create PPD file \"%s\" - %s.\n"
msgstr "ppdc: PPD ファイル \"%s\" を作成できません - %s。\n"
-
-#, c-format
msgid "ppdc: Unable to create output directory %s: %s\n"
msgstr "ppdc: ディレクトリー \"%s\" を作成できません - %s\n"
-
-#, c-format
msgid "ppdc: Unable to create output pipes: %s\n"
msgstr "ppdc: 出力 pipe が作成できません: %s\n"
-
-#, c-format
msgid "ppdc: Unable to execute cupstestppd: %s\n"
msgstr "ppdc: cupstestppd を実行できません: %s\n"
-
-#, c-format
msgid "ppdc: Unable to find #po file %s on line %d of %s!\n"
msgstr "ppdc: #po ファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Unable to find include file \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
msgid "ppdc: Unable to find localization for \"%s\" - %s\n"
msgstr "ppdc: \"%s\" に対する地域化情報が見つかりません - %s \n"
-
-#, c-format
msgid "ppdc: Unable to load localization file \"%s\" - %s\n"
msgstr "ppdc: \"%s\" に対する地域化情報を読み込めません - %s \n"
-
-#, c-format
msgid "ppdc: Undefined variable (%s) on line %d of %s.\n"
msgstr "ppdc: 変数 (%s) は未定義です。%d 行目、ファイル名 %s。\n"
-
-#, c-format
msgid "ppdc: Unknown driver type %s on line %d of %s!\n"
msgstr "ppdc: %s は未知のドライバータイプです。%d 行目、ファイル名 %s。\n"
-
-#, c-format
msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s!\n"
msgstr "ppdc: \"%s\" は未知の両面タイプです。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Unknown media size \"%s\" on line %d of %s!\n"
msgstr "ppdc: \"%s\" は未知の用紙サイズです。%d 行目、ファイル名 %s!\n"
-
-#, c-format
msgid "ppdc: Unknown token \"%s\" seen on line %d of %s!\n"
msgstr "ppdc: 未知の token \"%s\" があります。%d 行目、ファイル名 %s!\n"
-
-#, c-format
-msgid ""
-"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: 実数に未知の終了文字 \"%s\" があります。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgid "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
+msgstr "ppdc: 実数に未知の終了文字 \"%s\" があります。%d 行目、ファイル名 %s!\n"
msgid "ppdc: Unterminated string starting with %c on line %d of %s!\n"
-msgstr ""
-"ppdc: %c で始まる文字に対して終端文字がありません。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: %c で始まる文字に対して終端文字がありません。%d 行目、ファイル名 %s!\n"
msgid "ppdc: Writing %s...\n"
msgstr "ppdc: %s を書き込んでいます...\n"
-
-#, c-format
msgid "ppdc: Writing PPD files to directory \"%s\"...\n"
msgstr "ppdc: ディレクトリー \"%s\" に PPD ファイルを書き込んでいます...\n"
-
-#, c-format
msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s!\n"
msgstr "ppdmerge: 不正な LanguageVersion \"%s\" が %s にあります!\n"
-
-#, c-format
msgid "ppdmerge: Ignoring PPD file %s...\n"
msgstr "ppdmerge: PPD ファイル %s を無視します...\n"
-
-#, c-format
msgid "ppdmerge: Unable to backup %s to %s- %s\n"
msgstr "ppdmerge: %s を %s にバックアップできません - %s\n"
-
-#, c-format
msgid "printer %s disabled since %s -\n"
msgstr "プリンター %s は %s から無効です -\n"
-
-#, c-format
msgid "printer %s is idle. enabled since %s\n"
msgstr "プリンター %s は待機中です。%s 以来有効です\n"
-
-#, c-format
msgid "printer %s now printing %s-%d. enabled since %s\n"
msgstr "プリンター %s は %s-%d を印刷しています。%s 以来有効です\n"
-
-#, c-format
msgid "printer %s/%s disabled since %s -\n"
msgstr "プリンター %s/%s は %s から無効です -\n"
-
-#, c-format
msgid "printer %s/%s is idle. enabled since %s\n"
msgstr "プリンター %s/%s は待機中です。%s 以来有効です\n"
-
-#, c-format
msgid "printer %s/%s now printing %s-%d. enabled since %s\n"
msgstr "プリンター %s/%s は現在 %s-%d を印刷中です。%s 以来有効です\n"
-
msgid "processing"
msgstr "処理中"
-
-#, c-format
msgid "request id is %s-%d (%d file(s))\n"
msgstr "リクエスト ID は %s-%d です (%d 個のファイル)\n"
-
msgid "request-id uses indefinite length"
msgstr "リクエスト ID の長さが不定"
-
msgid "scheduler is not running\n"
msgstr "スケジューラーは動作していません\n"
-
msgid "scheduler is running\n"
msgstr "スケジューラーは動作中です\n"
-
-#, c-format
msgid "stat of %s failed: %s"
msgstr "%s の状態取得に失敗しました: %s"
-
msgid "status\t\tshow status of daemon and queue\n"
msgstr "status\t\tデーモンとキューの状態を表示\n"
-
msgid "stopped"
msgstr "停止"
-
-#, c-format
msgid "system default destination: %s\n"
msgstr "システムのデフォルトの宛先: %s\n"
-
-#, c-format
msgid "system default destination: %s/%s\n"
msgstr "システムのデフォルトの宛先: %s/%s\n"
-
msgid "unknown"
msgstr "未知"
-
msgid "untitled"
msgstr "タイトルなし"
-
msgid "variable-bindings uses indefinite length"
msgstr "variable-bindings の長さが不定"
-
-#~ msgid "%s: Unable to open %s - %s\n"
-#~ msgstr "%s: %s を開けません - %s\n"
-
-#~ msgid "%s: Unable to open %s - %s on line %d.\n"
-#~ msgstr "%s: %s を開けません。- %s の %d 行目。\n"
-
-#~ msgid "ERROR: Unable to create temporary file - %s.\n"
-#~ msgstr "ERROR: テンポラリーファイルを作成できません - %s\n"
-
-#~ msgid "ERROR: Unable to create temporary file: %s\n"
-#~ msgstr "ERROR: テンポラリーファイルを作成できません: %s\n"
-
-#~ msgid "ERROR: Unable to open temporary file"
-#~ msgstr "ERROR: テンポラリーファイルを開けません"
-
-#~ msgid ""
-#~ "Usage: convert [ options ]\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ " -f filename Set file to be converted (otherwise stdin)\n"
-#~ " -o filename Set file to be generated (otherwise stdout)\n"
-#~ " -i mime/type Set input MIME type (otherwise auto-typed)\n"
-#~ " -j mime/type Set output MIME type (otherwise application/pdf)\n"
-#~ " -P filename.ppd Set PPD file\n"
-#~ " -a 'name=value ...' Set option(s)\n"
-#~ " -U username Set username for job\n"
-#~ " -J title Set title\n"
-#~ " -c copies Set number of copies\n"
-#~ " -u Remove the PPD file when finished\n"
-#~ " -D Remove the input file when finished\n"
-#~ msgstr ""
-#~ "使い方: convert [ オプション ]\n"
-#~ "\n"
-#~ "オプション:\n"
-#~ "\n"
-#~ " -f ファイル名 変換するファイルを指定する (省略すると標準入力)\n"
-#~ " -o ファイル名 生成されるファイルを指定する (省略すると標準出力)\n"
-#~ " -i MIME/タイプ 入力 MIME タイプを指定する (省略すると自動設定)\n"
-#~ " -j MIME/タイプ 出力 MIME タイプを指定する (省略すると application/"
-#~ "pdf)\n"
-#~ " -P ファイル名.ppd PPD ファイルを指定する\n"
-#~ " -a '名前=値 ...' オプションを指定する\n"
-#~ " -U ユーザー名 ジョブのユーザー名を指定する\n"
-#~ " -J タイトル タイトルを指定する\n"
-#~ " -c コピー数 コピー数を指定する\n"
-#~ " -u 完了時に PPD ファイルを削除する\n"
-#~ " -D 完了時に入力ファイルを削除する\n"
-
-#~ msgid ""
-#~ "Usage: cupsfilter -m mime/type [ options ] filename\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ " -c cupsd.conf Set cupsd.conf file to use\n"
-#~ " -j job-id[,N] Filter file N from the specified job (default is file "
-#~ "1)\n"
-#~ " -n copies Set number of copies\n"
-#~ " -o name=value Set option(s)\n"
-#~ " -p filename.ppd Set PPD file\n"
-#~ " -t title Set title\n"
-#~ msgstr ""
-#~ "使い方: cupsfilter -m MIME/タイプ [ オプション ] ファイル名\n"
-#~ "\n"
-#~ "オプション:\n"
-#~ "\n"
-#~ " -c cupsd.conf 利用する cupsd.conf ファイルを指定する\n"
-#~ " -n コピー数 コピー数を指定する\n"
-#~ " -o 名前=値 オプションを指定する\n"
-#~ " -p ファイル名.ppd PPD ファイルを指定する\n"
-#~ " -t タイトル タイトルを指定する\n"
-
-#~ msgid ""
-#~ "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
-#~ " program | cupstestppd [options] -\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ " -R root-directory Set alternate root\n"
-#~ " -W {all,none,constraints,defaults,duplex,filters,translations}\n"
-#~ " Issue warnings instead of errors\n"
-#~ " -q Run silently\n"
-#~ " -r Use 'relaxed' open mode\n"
-#~ " -v Be slightly verbose\n"
-#~ " -vv Be very verbose\n"
-#~ msgstr ""
-#~ "使い方: cupstestppd [オプション] ファイル名1.ppd[.gz] [...ファイル名N.ppd"
-#~ "[.gz]]\n"
-#~ " プログラム | cupstestppd [オプション] -\n"
-#~ "\n"
-#~ "オプション:\n"
-#~ "\n"
-#~ " -R ルートディレクトリ 別のルートを指定する\n"
-#~ " -W {all,none,constraints,defaults,filters,translations}\n"
-#~ " エラーの代わりに警告を発行する\n"
-#~ " -q 詳細は表示しない\n"
-#~ " -r 寛容モード\n"
-#~ " -v やや詳細に表示する\n"
-#~ " -vv 非常に詳細に表示する\n"
-
-#~ msgid "cupsfilter: Unable to create temporary file: %s\n"
-#~ msgstr "cupsfilter: テンポラリー・ファイル: %s を作成できません\n"
-
-#~ msgid "lpadmin: Unable to create temporary file - %s\n"
-#~ msgstr "lpadmin: テンポラリファイルを作成できません - %s\n"
-
-#~ msgid "lpadmin: Unable to create temporary file: %s\n"
-#~ msgstr "lpadmin: テンポラリファイルを作成できません: %s\n"
diff --git a/man/classes.conf.man b/man/classes.conf.man
index 17f9dc353..391520343 100644
--- a/man/classes.conf.man
+++ b/man/classes.conf.man
@@ -12,7 +12,7 @@
.\" which should have been included with this file. If this file is
.\" file is missing or damaged, see the license at "http://www.cups.org/".
.\"
-.TH classes.conf 5 "CUPS" "12 February 2006" "Apple Inc."
+.TH classes.conf 5 "CUPS" "29 April 2009" "Apple Inc."
.SH NAME
classes.conf \- class configuration file for cups
.SH DESCRIPTION
@@ -47,14 +47,6 @@ DenyUser [ user @group ... ]
.br
Prevents specific users and groups from printing to the printer.
.TP 5
-ErrorPolicy abort-job
-.TP 5
-ErrorPolicy retry-job
-.TP 5
-ErrorPolicy stop-printer
-.br
-Specifies the error policy for the printer.
-.TP 5
Info text
.br
Specifies human-readable text describing the printer.
diff --git a/man/printers.conf.man b/man/printers.conf.man
index 674923d22..ef5ecabe8 100644
--- a/man/printers.conf.man
+++ b/man/printers.conf.man
@@ -12,7 +12,7 @@
.\" which should have been included with this file. If this file is
.\" file is missing or damaged, see the license at "http://www.cups.org/".
.\"
-.TH printers.conf 5 "CUPS" "12 February 2006" "Apple Inc."
+.TH printers.conf 5 "CUPS" "29 April 2009" "Apple Inc."
.SH NAME
printers.conf \- printer configuration file for cups
.SH DESCRIPTION
@@ -53,6 +53,8 @@ Specifies the device URI for a printer.
.TP 5
ErrorPolicy abort-job
.TP 5
+ErrorPolicy retry-current-job
+.TP 5
ErrorPolicy retry-job
.TP 5
ErrorPolicy stop-printer
diff --git a/packaging/cups.spec.in b/packaging/cups.spec.in
index 237cffe4e..09ab796f3 100644
--- a/packaging/cups.spec.in
+++ b/packaging/cups.spec.in
@@ -234,6 +234,8 @@ rm -rf $RPM_BUILD_ROOT
/usr/share/cups/templates/*
%dir /usr/share/doc/cups
/usr/share/doc/cups/*.*
+%dir /usr/share/doc/cups/de
+/usr/share/doc/cups/de/*
%dir /usr/share/doc/cups/es
/usr/share/doc/cups/es/*
%dir /usr/share/doc/cups/ja
diff --git a/ppdc/Makefile b/ppdc/Makefile
index db4d1896e..fb383706d 100644
--- a/ppdc/Makefile
+++ b/ppdc/Makefile
@@ -58,6 +58,7 @@ LIBTARGETS = \
libcupsppdc.a
UNITTARGETS = \
ppdc-static \
+ ppdi-static \
testcatalog
EXECTARGETS = \
ppdc \
@@ -101,8 +102,8 @@ clean:
$(RM) $(OBJS) core
$(RM) *.bak *.bck core.*
$(RM) $(TARGETS) $(UNITTARGETS)
- $(RM) -r ppd
- $(RM) sample.c test.drv
+ $(RM) -r ppd ppd2
+ $(RM) sample-import.drv sample.c test.drv
$(RM) libcupsppdc.so libcupsppdc.sl libcupsppdc.dylib
@@ -217,7 +218,10 @@ apihelp:
--title "PPD Compiler API" \
--css ../doc/cups-printable.css \
--header api-ppdc.header --intro api-ppdc.shtml \
+ api-ppdc.xml \
ppdc.h $(LIBOBJS:.o=.cxx) >../doc/help/api-ppdc.html
+ mxmldoc --tokens help/api-ppdc.html api-ppdc.xml >../doc/help/api-ppdc.tokens
+ $(RM) api-ppdc.xml
framedhelp:
mxmldoc --framed api-ppdc \
@@ -279,6 +283,24 @@ ppdi: ppdi.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
$(CXX) $(LDFLAGS) -o $@ ppdi.o -L. -lcupsppdc $(LIBS)
+ppdi-static: ppdc-static ppdi.o libcupsppdc.a ../cups/libcups.a
+ echo Linking $@...
+ $(CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdi-static ppdi.o libcupsppdc.a \
+ ../cups/libcups.a $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
+ $(COMMONLIBS) $(LIBZ)
+ echo Testing PPD importer...
+ $(RM) -r ppd ppd2 sample-import.drv
+ ./ppdc-static -I ../data sample.drv
+ ./ppdi-static -I ../data -o sample-import.drv ppd/*
+ ./ppdc-static -I ../data -d ppd2 sample-import.drv
+ if diff -qr ppd ppd2; then \
+ echo PPD import OK; \
+ else \
+ echo PPD import FAILED; \
+ exit 1; \
+ fi
+
+
#
# ppdmerge, merge PPD files.
#
diff --git a/ppdc/ppdc-driver.cxx b/ppdc/ppdc-driver.cxx
index ba9c78c9c..94f8bac38 100644
--- a/ppdc/ppdc-driver.cxx
+++ b/ppdc/ppdc-driver.cxx
@@ -190,7 +190,7 @@ ppdcDriver::find_attr(const char *k, // I - Keyword string
for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next())
if (!strcmp(a->name->value, k) &&
((!s && (!a->selector->value || !a->selector->value[0])) ||
- (!s && !a->selector->value && !strcmp(a->selector->value, s))))
+ (s && a->selector->value && !strcmp(a->selector->value, s))))
return (a);
return (NULL);
@@ -378,7 +378,8 @@ ppdcDriver::write_ppd_file(
ppdcLineEnding le) // I - Line endings to use
{
bool delete_cat; // Delete the catalog when we are done?
- char query[42]; // Query attribute
+ char query[42], // Query attribute
+ custom[42]; // Custom attribute
ppdcString *s; // Copyright string
ppdcGroup *g; // Current group
ppdcOption *o; // Current option
@@ -412,10 +413,11 @@ ppdcDriver::write_ppd_file(
// Write the standard header stuff...
cupsFilePrintf(fp, "*PPD-Adobe: \"4.3\"%s", lf);
- cupsFilePrintf(fp, "*%% PPD file for %s with CUPS.%s", model_name->value, lf);
+ cupsFilePrintf(fp, "*%%%%%%%% PPD file for %s with CUPS.%s",
+ model_name->value, lf);
cupsFilePrintf(fp,
- "*%% Created by the CUPS PPD Compiler " CUPS_SVERSION ".%s",
- lf);
+ "*%%%%%%%% Created by the CUPS PPD Compiler " CUPS_SVERSION
+ ".%s", lf);
for (s = (ppdcString *)copyright->first();
s;
s = (ppdcString *)copyright->next())
@@ -559,6 +561,14 @@ ppdcDriver::write_ppd_file(
!strcmp(a->name->value, "?PaperDimension")))
continue;
+ if (!strncmp(a->name->value, "Custom", 6) &&
+ find_option(a->name->value + 6))
+ continue;
+
+ if (!strncmp(a->name->value, "ParamCustom", 11) &&
+ find_option(a->name->value + 11))
+ continue;
+
if (!a->selector->value || !a->selector->value[0])
cupsFilePrintf(fp, "*%s", a->name->value);
else if (!a->text->value || !a->text->value[0])
@@ -579,7 +589,7 @@ ppdcDriver::write_ppd_file(
{
cupsFilePrintf(fp, ": \"%s\"%s", a->value->value, lf);
- if (strchr(a->value->value, '\n'))
+ if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r'))
cupsFilePrintf(fp, "*End%s", lf);
}
else
@@ -931,9 +941,6 @@ ppdcDriver::write_ppd_file(
cupsFilePrintf(fp, "*ParamCustomPageSize Orientation: 5 int 0 0%s", lf);
}
- if (type != PPDC_DRIVER_PS && !find_attr("RequiresPageRegion", NULL))
- cupsFilePrintf(fp, "*RequiresPageRegion All: True%s", lf);
-
// All other options...
for (g = (ppdcGroup *)groups->first(); g; g = (ppdcGroup *)groups->next())
{
@@ -1034,7 +1041,7 @@ ppdcDriver::write_ppd_file(
if ((a = find_attr(query, NULL)) != NULL)
{
- cupsFilePrintf(fp, "*%s: \"%s\"\n", query, a->value->value);
+ cupsFilePrintf(fp, "*%s: \"%s\"%s", query, a->value->value, lf);
if (strchr(a->value->value, '\n') ||
strchr(a->value->value, '\r'))
@@ -1042,6 +1049,32 @@ ppdcDriver::write_ppd_file(
}
cupsFilePrintf(fp, "*CloseUI: *%s%s", o->name->value, lf);
+
+ snprintf(custom, sizeof(custom), "Custom%s", o->name->value);
+ if ((a = find_attr(custom, "True")) != NULL)
+ {
+ // Output custom option information...
+ cupsFilePrintf(fp, "*%s True: \"%s\"%s", custom, a->value->value, lf);
+ if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r'))
+ cupsFilePrintf(fp, "*End%s", lf);
+
+ snprintf(custom, sizeof(custom), "ParamCustom%s", o->name->value);
+ for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next())
+ {
+ if (strcmp(a->name->value, custom))
+ continue;
+
+ if (!a->selector->value || !a->selector->value[0])
+ cupsFilePrintf(fp, "*%s", a->name->value);
+ else if (!a->text->value || !a->text->value[0])
+ cupsFilePrintf(fp, "*%s %s", a->name->value, a->selector->value);
+ else
+ cupsFilePrintf(fp, "*%s %s/%s", a->name->value, a->selector->value,
+ a->text->value);
+
+ cupsFilePrintf(fp, ": %s%s", a->value->value, lf);
+ }
+ }
}
if (strcasecmp(g->name->value, "General"))
diff --git a/ppdc/ppdc-import.cxx b/ppdc/ppdc-import.cxx
index 530592936..eb04648f2 100644
--- a/ppdc/ppdc-import.cxx
+++ b/ppdc/ppdc-import.cxx
@@ -38,6 +38,7 @@ ppdcSource::import_ppd(const char *f) // I - Filename
cups_file_t *fp; // File
char line[256], // Comment line
*ptr; // Pointer into line
+ int cost; // Cost for filter
ppd_file_t *ppd; // PPD file data
ppd_group_t *group; // PPD group
ppd_option_t *option; // PPD option
@@ -47,6 +48,7 @@ ppdcSource::import_ppd(const char *f) // I - Filename
ppd_const_t *constraint2; // Temp PPD UI constraint
ppd_size_t *size; // PPD page size
ppdcDriver *driver; // Driver
+ ppdcFilter *filter; // Current filter
ppdcFont *font; // Font
ppdcGroup *cgroup; // UI group
ppdcOption *coption; // UI option
@@ -89,7 +91,7 @@ ppdcSource::import_ppd(const char *f) // I - Filename
while (cupsFileGets(fp, line, sizeof(line)))
if (strncmp(line, "*%", 2))
break;
- else
+ else if (strncmp(line, "*%%%% ", 6))
{
for (ptr = line + 2; isspace(*ptr); ptr ++);
@@ -111,15 +113,49 @@ ppdcSource::import_ppd(const char *f) // I - Filename
else
ptr = ppd->modelname;
- driver->manufacturer = new ppdcString(ppd->manufacturer);
- driver->model_name = new ppdcString(ptr);
- driver->pc_file_name = new ppdcString(ppd->pcfilename);
+ if (ppd->nickname)
+ driver->add_attr(new ppdcAttr("NickName", NULL, NULL, ppd->nickname));
+
+ if (ppd->shortnickname)
+ driver->add_attr(new ppdcAttr("ShortNickName", NULL, NULL,
+ ppd->shortnickname));
+
+ driver->manufacturer = new ppdcString(ppd->manufacturer);
+ driver->model_name = new ppdcString(ptr);
+ driver->pc_file_name = new ppdcString(ppd->pcfilename);
attr = ppdFindAttr(ppd, "FileVersion", NULL);
- driver->version = new ppdcString(attr ? attr->value : NULL);
- driver->model_number = ppd->model_number;
- driver->manual_copies = ppd->manual_copies;
- driver->color_device = ppd->color_device;
- driver->throughput = ppd->throughput;
+ driver->version = new ppdcString(attr ? attr->value : NULL);
+ driver->model_number = ppd->model_number;
+ driver->manual_copies = ppd->manual_copies;
+ driver->color_device = ppd->color_device;
+ driver->throughput = ppd->throughput;
+ driver->variable_paper_size = ppd->variable_sizes;
+ driver->max_width = ppd->custom_max[0];
+ driver->max_length = ppd->custom_max[1];
+ driver->min_width = ppd->custom_min[0];
+ driver->min_length = ppd->custom_min[1];
+ driver->left_margin = ppd->custom_margins[0];
+ driver->bottom_margin = ppd->custom_margins[1];
+ driver->right_margin = ppd->custom_margins[2];
+ driver->top_margin = ppd->custom_margins[3];
+
+ for (i = 0; i < ppd->num_filters; i ++)
+ {
+ strlcpy(line, ppd->filters[i], sizeof(line));
+
+ for (ptr = line; *ptr; ptr ++)
+ if (isspace(*ptr & 255))
+ break;
+ *ptr++ = '\0';
+
+ cost = strtol(ptr, &ptr, 10);
+
+ while (isspace(*ptr & 255))
+ ptr ++;
+
+ filter = new ppdcFilter(line, ptr, cost);
+ driver->add_filter(filter);
+ }
attr = ppdFindAttr(ppd, "DefaultFont", NULL);
driver->default_font = new ppdcString(attr ? attr->value : NULL);
@@ -166,7 +202,7 @@ ppdcSource::import_ppd(const char *f) // I - Filename
{
if (!strcmp(option->keyword, "PageSize") || !strcmp(option->keyword, "PageRegion"))
continue;
-
+
coption = new ppdcOption((ppdcOptType)option->ui, option->keyword,
option->text, (ppdcOptSection)option->section,
option->order);
@@ -174,6 +210,9 @@ ppdcSource::import_ppd(const char *f) // I - Filename
for (k = option->num_choices, choice = option->choices; k > 0; k --, choice ++)
{
+ if (!strcmp(choice->choice, "Custom"))
+ continue;
+
cchoice = new ppdcChoice(choice->choice, choice->text, choice->code);
coption->add_choice(cchoice);
@@ -188,25 +227,21 @@ ppdcSource::import_ppd(const char *f) // I - Filename
i > 0;
i --, constraint ++)
{
- for (j = i - 1, constraint2 = constraint;
+ // Look for mirrored constraints...
+ for (j = i - 1, constraint2 = constraint + 1;
j > 0;
j --, constraint2 ++)
- if (constraint != constraint2 &&
- !strcmp(constraint->option1, constraint2->option2) &&
- (constraint->choice1 == constraint2->choice2 ||
- (constraint->choice1 && constraint2->choice2 &&
- !strcmp(constraint->choice1, constraint2->choice2))) &&
+ if (!strcmp(constraint->option1, constraint2->option2) &&
+ !strcmp(constraint->choice1, constraint2->choice2) &&
!strcmp(constraint->option2, constraint2->option1) &&
- (constraint->choice2 == constraint2->choice1 ||
- (constraint->choice2 && constraint2->choice1 &&
- !strcmp(constraint->choice2, constraint2->choice1))))
+ !strcmp(constraint->choice2, constraint2->choice1))
break;
if (j)
continue;
- cconstraint = new ppdcConstraint(constraint->option1, constraint->choice1,
- constraint->option2, constraint->choice2);
+ cconstraint = new ppdcConstraint(constraint->option2, constraint->choice2,
+ constraint->option1, constraint->choice1);
driver->add_constraint(cconstraint);
}
@@ -240,6 +275,10 @@ ppdcSource::import_ppd(const char *f) // I - Filename
driver->add_font(font);
}
+ else if (!strcmp(attr->name, "CustomPageSize"))
+ {
+ driver->set_custom_size_code(attr->value);
+ }
else if ((strncmp(attr->name, "Default", 7) ||
!strcmp(attr->name, "DefaultColorSpace")) &&
strcmp(attr->name, "ColorDevice") &&
@@ -248,15 +287,35 @@ ppdcSource::import_ppd(const char *f) // I - Filename
strcmp(attr->name, "MaxMediaHeight") &&
strcmp(attr->name, "MaxMediaWidth") &&
strcmp(attr->name, "NickName") &&
+ strcmp(attr->name, "ParamCustomPageSize") &&
strcmp(attr->name, "ShortNickName") &&
strcmp(attr->name, "Throughput") &&
strcmp(attr->name, "PCFileName") &&
strcmp(attr->name, "FileVersion") &&
strcmp(attr->name, "FormatVersion") &&
+ strcmp(attr->name, "HWMargins") &&
strcmp(attr->name, "VariablePaperSize") &&
strcmp(attr->name, "LanguageEncoding") &&
- strcmp(attr->name, "LanguageVersion"))
+ strcmp(attr->name, "LanguageVersion") &&
+ strcmp(attr->name, "cupsFilter") &&
+ strcmp(attr->name, "cupsFlipDuplex") &&
+ strcmp(attr->name, "cupsLanguages") &&
+ strcmp(attr->name, "cupsManualCopies") &&
+ strcmp(attr->name, "cupsModelNumber") &&
+ strcmp(attr->name, "cupsVersion"))
{
+ if ((ptr = strchr(attr->name, '.')) != NULL &&
+ ((ptr - attr->name) == 2 || (ptr - attr->name) == 5))
+ {
+ // Might be a localization attribute; test further...
+ if (isalpha(attr->name[0] & 255) &&
+ isalpha(attr->name[1] & 255) &&
+ (attr->name[2] == '.' ||
+ (attr->name[2] == '_' && isalpha(attr->name[3] & 255) &&
+ isalpha(attr->name[4] & 255))))
+ continue;
+ }
+
// Attribute...
driver->add_attr(new ppdcAttr(attr->name, attr->spec, attr->text,
attr->value));
diff --git a/ppdc/sample.drv b/ppdc/sample.drv
index fedc82965..52e73e32f 100644
--- a/ppdc/sample.drv
+++ b/ppdc/sample.drv
@@ -3,7 +3,7 @@
//
// Driver info file for CUPS-supplied PPDs.
//
-// Copyright 2007-2008 by Apple Inc.
+// Copyright 2007-2009 by Apple Inc.
// Copyright 1993-2006 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
@@ -521,11 +521,10 @@ Version "1.4"
MinSize 36 36
MaxSize 630 7128
- UIConstraints "*inPrintMode Standard *inCutInterval "
- UIConstraints "*inPrintMode Standard *inTearInterval "
- UIConstraints "*inPrintMode Tear *inCutInterval "
- UIConstraints "*inTearInterval *inPrintMode Cut"
- UIConstraints "*inTearInterval *inPrintMode Standard"
+ UIConstraints "*inPrintMode Standard *inCutInterval"
+ UIConstraints "*inPrintMode Tear *inCutInterval"
+ UIConstraints "*inPrintMode Standard *inTearInterval"
+ UIConstraints "*inPrintMode Cut *inTearInterval"
*MediaSize w288h432
diff --git a/scheduler/Makefile b/scheduler/Makefile
index 9479c7af5..2cbb74edc 100644
--- a/scheduler/Makefile
+++ b/scheduler/Makefile
@@ -152,7 +152,8 @@ install-data:
$(INSTALL_DIR) -m 755 $(STATEDIR); \
fi
echo Creating $(STATEDIR)/certs...
- $(INSTALL_DIR) -m 511 -g $(CUPS_PRIMARY_SYSTEM_GROUP) $(STATEDIR)/certs
+ $(INSTALL_DIR) -m 511 -o $(CUPS_USER) -g $(CUPS_PRIMARY_SYSTEM_GROUP) \
+ $(STATEDIR)/certs
echo Creating $(LOGDIR)...
$(INSTALL_DIR) -m 755 $(LOGDIR)
echo Creating $(REQUESTS)...
@@ -276,6 +277,8 @@ apihelp:
--css ../doc/cups-printable.css \
--header api-mime.header --intro api-mime.shtml \
mime.h $(LIBOBJS:.o=.c) >../doc/help/api-mime.html
+ mxmldoc --tokens help/api-mime.html api-mime.xml >../doc/help/api-mime.tokens
+ $(RM) api-mime.xml
framedhelp:
mxmldoc --framed api-mime \
diff --git a/scheduler/auth.c b/scheduler/auth.c
index 7316c8feb..d72f3064d 100644
--- a/scheduler/auth.c
+++ b/scheduler/auth.c
@@ -495,7 +495,11 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
peersize = sizeof(peercred);
+# ifdef __APPLE__
+ if (getsockopt(con->http.fd, 0, LOCAL_PEERCRED, &peercred, &peersize))
+# else
if (getsockopt(con->http.fd, SOL_SOCKET, SO_PEERCRED, &peercred, &peersize))
+# endif /* __APPLE__ */
{
cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get peer credentials - %s",
strerror(errno));
diff --git a/scheduler/classes.c b/scheduler/classes.c
index d34697600..b836962cf 100644
--- a/scheduler/classes.c
+++ b/scheduler/classes.c
@@ -55,9 +55,9 @@ cupsdAddClass(const char *name) /* I - Name of class */
c->type = CUPS_PRINTER_CLASS;
- cupsdSetStringf(&c->uri, "ipp://%s:%d/classes/%s", ServerName, LocalPort,
+ cupsdSetStringf(&c->uri, "ipp://%s:%d/classes/%s", ServerName, RemotePort,
name);
- cupsdSetString(&c->error_policy, "retry-job");
+ cupsdSetString(&c->error_policy, "retry-current-job");
}
return (c);
@@ -629,7 +629,12 @@ cupsdLoadAllClasses(void)
else if (!strcasecmp(line, "ErrorPolicy"))
{
if (value)
- cupsdSetString(&p->error_policy, value);
+ {
+ if (strcmp(value, "retry-current-job") && strcmp(value, "retry-job"))
+ cupsdLogMessage(CUPSD_LOG_WARN,
+ "ErrorPolicy %s ignored on line %d of classes.conf",
+ value, linenum);
+ }
else
cupsdLogMessage(CUPSD_LOG_ERROR,
"Syntax error on line %d of classes.conf.", linenum);
diff --git a/scheduler/client.c b/scheduler/client.c
index b5a59ae88..304219ae9 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -422,7 +422,7 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
{
if (httpAddrLocalhost(&temp))
strlcpy(con->servername, "localhost", sizeof(con->servername));
- else if (HostNameLookups || RemoteAccessEnabled)
+ else if (HostNameLookups || RemotePort)
httpAddrLookup(&temp, con->servername, sizeof(con->servername));
else
httpAddrString(&temp, con->servername, sizeof(con->servername));
@@ -435,7 +435,7 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
{
if (httpAddrLocalhost(&temp))
strlcpy(con->servername, "localhost", sizeof(con->servername));
- else if (HostNameLookups || RemoteAccessEnabled)
+ else if (HostNameLookups || RemotePort)
httpAddrLookup(&temp, con->servername, sizeof(con->servername));
else
httpAddrString(&temp, con->servername, sizeof(con->servername));
@@ -544,8 +544,7 @@ cupsdCloseClient(cupsd_client_t *con) /* I - Client to close */
#endif /* HAVE_LIBSSL */
- cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCloseClient(con=%p(%d))", con,
- con->http.fd);
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdCloseClient: %d", con->http.fd);
/*
* Flush pending writes before closing...
@@ -794,12 +793,6 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
"CHUNKED" : "LENGTH",
CUPS_LLCAST con->http.data_remaining, con->file);
- if (con->http.error)
- {
- cupsdCloseClient(con);
- return;
- }
-
#ifdef HAVE_SSL
if (con->auto_ssl)
{
@@ -837,6 +830,16 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (httpGets(line, sizeof(line) - 1, HTTP(con)) == NULL)
{
+ if (con->http.error && con->http.error != EPIPE)
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d WAITING Closing for error %d "
+ "(%s)", con->http.fd, con->http.error,
+ strerror(con->http.error));
+ else
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d WAITING Closing on EOF",
+ con->http.fd);
+
cupsdCloseClient(con);
return;
}
@@ -938,6 +941,9 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
}
else
{
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unsupported request line \"%s\" from %s!",
+ line, con->http.hostname);
cupsdSendError(con, HTTP_NOT_SUPPORTED, CUPSD_AUTH_NONE);
cupsdCloseClient(con);
return;
@@ -1055,6 +1061,16 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (status != HTTP_OK && status != HTTP_CONTINUE)
{
+ if (con->http.error && con->http.error != EPIPE)
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d FIELDS Closing for error %d "
+ "(%s)", con->http.fd, con->http.error,
+ strerror(con->http.error));
+ else
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d FIELDS Closing on EOF",
+ con->http.fd);
+
cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE);
cupsdCloseClient(con);
return;
@@ -1068,6 +1084,8 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
* Connection closed...
*/
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d Closing on EOF", con->http.fd);
cupsdCloseClient(con);
return;
}
@@ -1087,13 +1105,16 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
* fields...
*/
- if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE], ',')) != NULL)
+ if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE],
+ ',')) != NULL)
*ptr = '\0';
- if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE], ';')) != NULL)
+ if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE],
+ ';')) != NULL)
*ptr = '\0';
- if ((ptr = strstr(con->http.fields[HTTP_FIELD_CONTENT_TYPE], "charset=")) != NULL)
+ if ((ptr = strstr(con->http.fields[HTTP_FIELD_CONTENT_TYPE],
+ "charset=")) != NULL)
{
/*
* Combine language and charset, and trim any extra params in the
@@ -1117,8 +1138,8 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
cupsdAuthorize(con);
- if (!strncasecmp(con->http.fields[HTTP_FIELD_CONNECTION], "Keep-Alive", 10) &&
- KeepAlive)
+ if (!strncasecmp(con->http.fields[HTTP_FIELD_CONNECTION], "Keep-Alive",
+ 10) && KeepAlive)
con->http.keep_alive = HTTP_KEEPALIVE_ON;
else if (!strncasecmp(con->http.fields[HTTP_FIELD_CONNECTION], "close", 5))
con->http.keep_alive = HTTP_KEEPALIVE_OFF;
@@ -1132,6 +1153,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (!cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE))
{
+ cupsdLogMessage(CUPSD_LOG_ERROR, "Missing Host: field in request!");
cupsdCloseClient(con);
return;
}
@@ -1143,7 +1165,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
* or IPv6 values in the Host: field.
*/
- cupsdLogMessage(CUPSD_LOG_WARN,
+ cupsdLogMessage(CUPSD_LOG_ERROR,
"Request from \"%s\" using invalid Host: field \"%s\"",
con->http.hostname, con->http.fields[HTTP_FIELD_HOST]);
@@ -1307,7 +1329,8 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
* Send 417-expectation-failed header...
*/
- if (!cupsdSendHeader(con, HTTP_EXPECTATION_FAILED, NULL, CUPSD_AUTH_NONE))
+ if (!cupsdSendHeader(con, HTTP_EXPECTATION_FAILED, NULL,
+ CUPSD_AUTH_NONE))
{
cupsdCloseClient(con);
return;
@@ -1837,7 +1860,8 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
else if ((filename = get_file(con, &filestats, buf,
sizeof(buf))) == NULL)
{
- if (!cupsdSendHeader(con, HTTP_NOT_FOUND, "text/html", CUPSD_AUTH_NONE))
+ if (!cupsdSendHeader(con, HTTP_NOT_FOUND, "text/html",
+ CUPSD_AUTH_NONE))
{
cupsdCloseClient(con);
return;
@@ -1922,6 +1946,16 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
{
if ((bytes = httpRead2(HTTP(con), line, sizeof(line))) < 0)
{
+ if (con->http.error && con->http.error != EPIPE)
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d PUT_RECV Closing for error "
+ "%d (%s)", con->http.fd, con->http.error,
+ strerror(con->http.error));
+ else
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d PUT_RECV Closing on EOF",
+ con->http.fd);
+
cupsdCloseClient(con);
return;
}
@@ -1999,7 +2033,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
case HTTP_POST_RECV :
do
{
- if (con->request)
+ if (con->request && con->file < 0)
{
/*
* Grab any request data from the connection...
@@ -2027,7 +2061,14 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
break;
}
else
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdReadClient: %d %d.%d %s %d",
+ con->http.fd, con->request->request.op.version[0],
+ con->request->request.op.version[1],
+ ippOpString(con->request->request.op.operation_id),
+ con->request->request.op.request_id);
con->bytes += ippLength(con->request);
+ }
}
if (con->file < 0 && con->http.state != HTTP_POST_SEND)
@@ -2036,7 +2077,8 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
* Create a file as needed for the request data...
*/
- cupsdSetStringf(&con->filename, "%s/%08x", RequestRoot, request_id ++);
+ cupsdSetStringf(&con->filename, "%s/%08x", RequestRoot,
+ request_id ++);
con->file = open(con->filename, O_WRONLY | O_CREAT | O_TRUNC, 0640);
if (con->file < 0)
@@ -2061,6 +2103,16 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
{
if ((bytes = httpRead2(HTTP(con), line, sizeof(line))) < 0)
{
+ if (con->http.error && con->http.error != EPIPE)
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d POST_SEND Closing for "
+ "error %d (%s)", con->http.fd, con->http.error,
+ strerror(con->http.error));
+ else
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d POST_SEND Closing on EOF",
+ con->http.fd);
+
cupsdCloseClient(con);
return;
}
@@ -2071,15 +2123,17 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (write(con->file, line, bytes) < bytes)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
- "cupsdReadClient: Unable to write %d bytes to %s: %s",
- bytes, con->filename, strerror(errno));
+ "cupsdReadClient: Unable to write %d bytes to "
+ "%s: %s", bytes, con->filename,
+ strerror(errno));
close(con->file);
con->file = -1;
unlink(con->filename);
cupsdClearString(&con->filename);
- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE))
+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE,
+ CUPSD_AUTH_NONE))
{
cupsdCloseClient(con);
return;
@@ -2090,6 +2144,9 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
return;
else if (con->http.state != HTTP_POST_SEND)
{
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d Closing on unknown HTTP "
+ "state %d", con->http.fd, con->http.state);
cupsdCloseClient(con);
return;
}
@@ -2170,7 +2227,12 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (con->http.state == HTTP_WAITING)
{
if (!con->http.keep_alive)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdReadClient: %d Closing because Keep-Alive disabled",
+ con->http.fd);
cupsdCloseClient(con);
+ }
else
{
cupsArrayRemove(ActiveClients, con);
@@ -2507,7 +2569,7 @@ cupsdSendHeader(
SystemGroupAuthKey);
else
#else
- strlcpy(auth_key, ", trc=\"y\"", auth_size));
+ strlcpy(auth_key, ", trc=\"y\"", auth_size);
#endif /* HAVE_AUTHORIZATION_H */
break;
}
@@ -2669,6 +2731,9 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
* connection and we need to shut it down...
*/
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdWriteClient: %d Closing on unknown HTTP state %d",
+ con->http.fd, con->http.state);
cupsdCloseClient(con);
return;
}
@@ -2818,6 +2883,10 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
{
if (httpWrite2(HTTP(con), buf, bytes) < 0)
{
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdWriteClient: %d Closing for error %d (%s)",
+ con->http.fd, con->http.error,
+ strerror(con->http.error));
cupsdCloseClient(con);
return;
}
@@ -2847,6 +2916,10 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
{
if (httpWrite2(HTTP(con), "", 0) < 0)
{
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdWriteClient: %d Closing for error %d (%s)",
+ con->http.fd, con->http.error,
+ strerror(con->http.error));
cupsdCloseClient(con);
return;
}
@@ -2893,9 +2966,17 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
if (!con->http.keep_alive)
{
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "cupsdWriteClient: %d Closing because Keep-Alive disabled",
+ con->http.fd);
cupsdCloseClient(con);
return;
}
+ else
+ {
+ cupsArrayRemove(ActiveClients, con);
+ cupsdSetBusyState();
+ }
}
con->http.activity = time(NULL);
@@ -3314,10 +3395,6 @@ get_cdsa_certificate(cupsd_client_t *con) /* I - Client connection */
"get_cdsa_certificate: Looking for certs for \"%s\"...",
con->servername);
- cupsdLogMessage(CUPSD_LOG_DEBUG,
- "get_cdsa_certificate: Looking for certs for \"%s\"...",
- con->servername);
-
options.Data = (uint8 *)&ssl_options;
options.Length = sizeof(ssl_options);
@@ -4009,7 +4086,7 @@ make_certificate(cupsd_client_t *con) /* I - Client connection */
envp[envc++] = home;
envp[envc] = NULL;
- if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, -1, 1, NULL, 0,
+ if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, -1, 1, NULL,
NULL, &pid))
{
unlink(seedfile);
diff --git a/scheduler/client.h b/scheduler/client.h
index f807e9c10..86c7f8aff 100644
--- a/scheduler/client.h
+++ b/scheduler/client.h
@@ -85,8 +85,10 @@ typedef struct
VAR int ListenBackLog VALUE(SOMAXCONN),
/* Max backlog of pending connections */
- LocalPort VALUE(631);
+ LocalPort VALUE(631),
/* Local port to use */
+ RemotePort VALUE(0);
+ /* Remote port to use */
VAR http_encryption_t LocalEncryption VALUE(HTTP_ENCRYPT_IF_REQUESTED);
/* Local port encryption to use */
VAR cups_array_t *Listeners VALUE(NULL);
diff --git a/scheduler/conf.c b/scheduler/conf.c
index a020fa610..efc3a6b84 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -423,6 +423,7 @@ cupsdReadConfiguration(void)
struct group *group; /* Default group */
char *old_serverroot, /* Old ServerRoot */
*old_requestroot; /* Old RequestRoot */
+ int old_remote_port; /* Old RemotePort */
const char *tmpdir; /* TMPDIR environment variable */
struct stat tmpinfo; /* Temporary directory info */
cupsd_policy_t *p; /* Policy */
@@ -471,7 +472,8 @@ cupsdReadConfiguration(void)
cupsdDeleteAllListeners();
- RemoteAccessEnabled = 0;
+ old_remote_port = RemotePort;
+ RemotePort = 0;
/*
* String options...
@@ -708,13 +710,20 @@ cupsdReadConfiguration(void)
RunUser = getuid();
cupsdLogMessage(CUPSD_LOG_INFO, "Remote access is %s.",
- RemoteAccessEnabled ? "enabled" : "disabled");
+ RemotePort ? "enabled" : "disabled");
/*
* See if the ServerName is an IP address...
*/
- if (!ServerName)
+ if (ServerName)
+ {
+ if (!ServerAlias)
+ ServerAlias = cupsArrayNew(NULL, NULL);
+
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", ServerName);
+ }
+ else
{
if (gethostname(temp, sizeof(temp)))
{
@@ -731,7 +740,7 @@ cupsdReadConfiguration(void)
cupsdAddAlias(ServerAlias, temp);
cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", temp);
- if (HostNameLookups || RemoteAccessEnabled)
+ if (HostNameLookups || RemotePort)
{
struct hostent *host; /* Host entry to get FQDN */
@@ -1269,6 +1278,7 @@ cupsdReadConfiguration(void)
*/
if (NeedReload == RELOAD_ALL ||
+ old_remote_port != RemotePort ||
!old_serverroot || !ServerRoot || strcmp(old_serverroot, ServerRoot) ||
!old_requestroot || !RequestRoot || strcmp(old_requestroot, RequestRoot))
{
@@ -2570,7 +2580,14 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
ntohs(lis->address.ipv4.sin_port));
if (!httpAddrLocalhost(&(lis->address)))
- RemoteAccessEnabled = 1;
+ {
+#ifdef AF_INET6
+ if (lis->address.addr.sa_family == AF_INET6)
+ RemotePort = ntohs(lis->address.ipv6.sin6_port);
+ else
+#endif /* AF_INET6 */
+ RemotePort = ntohs(lis->address.ipv4.sin_port);
+ }
}
/*
diff --git a/scheduler/conf.h b/scheduler/conf.h
index d91bca359..582a152c2 100644
--- a/scheduler/conf.h
+++ b/scheduler/conf.h
@@ -114,9 +114,7 @@ VAR char *ConfigurationFile VALUE(NULL),
/* Root directory for documents */
VAR cups_array_t *ServerAlias VALUE(NULL);
/* Alias names for server */
-VAR int RemoteAccessEnabled VALUE(0),
- /* Are we listening on non-local addresses? */
- ServerNameIsIP VALUE(0);
+VAR int ServerNameIsIP VALUE(0);
/* Is the ServerName an IP address? */
VAR int NumSystemGroups VALUE(0);
/* Number of system group names */
diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c
index c9bad58ec..11be5585e 100644
--- a/scheduler/dirsvc.c
+++ b/scheduler/dirsvc.c
@@ -250,7 +250,8 @@ cupsdDeregisterPrinter(
removeit);
if (!Browsing || !p->shared ||
- (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+ (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+ CUPS_PRINTER_SCANNER)))
return;
/*
@@ -680,7 +681,8 @@ cupsdRegisterPrinter(cupsd_printer_t *p)/* I - Printer */
p->name);
if (!Browsing || !BrowseLocalProtocols ||
- (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+ (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+ CUPS_PRINTER_SCANNER)))
return;
#ifdef HAVE_LIBSLP
@@ -888,7 +890,8 @@ cupsdSendBrowseList(void)
for (count = 0, p = (cupsd_printer_t *)cupsArrayFirst(Printers);
count < max_count && p != NULL;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
- if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)) &&
+ if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+ CUPS_PRINTER_SCANNER)) &&
p->shared && p->browse_time < ut)
count ++;
@@ -914,7 +917,8 @@ cupsdSendBrowseList(void)
if (!p)
break;
- else if ((p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)) ||
+ else if ((p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+ CUPS_PRINTER_SCANNER)) ||
!p->shared)
continue;
else if (p->browse_time < ut)
@@ -1669,7 +1673,8 @@ cupsdStartBrowsing(void)
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
p;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
- if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+ if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+ CUPS_PRINTER_SCANNER)))
cupsdRegisterPrinter(p);
}
@@ -1797,7 +1802,8 @@ cupsdStopBrowsing(void)
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
p;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
- if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+ if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+ CUPS_PRINTER_SCANNER)))
cupsdDeregisterPrinter(p, 1);
/*
@@ -1902,9 +1908,8 @@ cupsdUpdateDNSSDName(void)
#ifdef HAVE_COREFOUNDATION_H
SCDynamicStoreRef sc; /* Context for dynamic store */
CFDictionaryRef btmm; /* Back-to-My-Mac domains */
- CFStringRef nameRef; /* Computer name CFString */
+ CFStringRef nameRef; /* Host name CFString */
char nameBuffer[1024]; /* C-string buffer */
- CFStringEncoding nameEncoding; /* Computer name encoding */
#endif /* HAVE_COREFOUNDATION_H */
@@ -1932,14 +1937,13 @@ cupsdUpdateDNSSDName(void)
cupsdClearString(&DNSSDName);
- if ((nameRef = SCDynamicStoreCopyComputerName(sc,
- &nameEncoding)) != NULL)
+ if ((nameRef = SCDynamicStoreCopyLocalHostName(sc)) != NULL)
{
if (CFStringGetCString(nameRef, nameBuffer, sizeof(nameBuffer),
kCFStringEncodingUTF8))
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "Dynamic store computer name is \"%s\".", nameBuffer);
+ "Dynamic store host name is \"%s\".", nameBuffer);
cupsdSetString(&DNSSDName, nameBuffer);
}
@@ -1953,7 +1957,7 @@ cupsdUpdateDNSSDName(void)
*/
cupsdLogMessage(CUPSD_LOG_DEBUG,
- "Using ServerName \"%s\" as computer name.", ServerName);
+ "Using ServerName \"%s\" as host name.", ServerName);
cupsdSetString(&DNSSDName, ServerName);
}
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index 536430140..637d760b4 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -1367,9 +1367,9 @@ add_job(cupsd_client_t *con, /* I - Client connection */
send_http_error(con, status, printer);
return (NULL);
}
- else if (printer->num_auth_info_required > 0 &&
- strcmp(printer->auth_info_required[0], "none") &&
- !con->username[0] && !auth_info)
+ else if (printer->num_auth_info_required == 1 &&
+ !strcmp(printer->auth_info_required[0], "negotiate") &&
+ !con->username[0])
{
send_http_error(con, HTTP_UNAUTHORIZED, printer);
return (NULL);
@@ -5496,6 +5496,25 @@ copy_printer_attrs(
ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME,
"printer-error-policy", NULL, printer->error_policy);
+ if (!ra || cupsArrayFind(ra, "printer-error-policy-supported"))
+ {
+ static const char * const errors[] =/* printer-error-policy-supported values */
+ {
+ "abort-job",
+ "retry-current-job",
+ "retry-job",
+ "stop-printer"
+ };
+
+ if (printer->type & (CUPS_PRINTER_IMPLICIT | CUPS_PRINTER_CLASS))
+ ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
+ "printer-error-policy-supported", NULL, "retry-current-job");
+ else
+ ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
+ "printer-error-policy-supported",
+ sizeof(errors) / sizeof(errors[0]), NULL, errors);
+ }
+
if (!ra || cupsArrayFind(ra, "printer-is-accepting-jobs"))
ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-accepting-jobs",
printer->accepting);
@@ -9455,6 +9474,7 @@ restart_job(cupsd_client_t *con, /* I - Client connection */
*/
cupsdRestartJob(job);
+ cupsdCheckJobs();
}
cupsdLogJob(job, CUPSD_LOG_INFO, "Restarted by \"%s\".", username);
@@ -10820,10 +10840,11 @@ set_printer_defaults(
if (attr->value_tag != IPP_TAG_NAME && attr->value_tag != IPP_TAG_KEYWORD)
continue;
- if (strcmp(attr->values[0].string.text, "abort-job") &&
- strcmp(attr->values[0].string.text, "retry-current-job") &&
- strcmp(attr->values[0].string.text, "retry-job") &&
- strcmp(attr->values[0].string.text, "stop-printer"))
+ if (strcmp(attr->values[0].string.text, "retry-current-job") &&
+ ((printer->type & (CUPS_PRINTER_IMPLICIT | CUPS_PRINTER_CLASS)) ||
+ (strcmp(attr->values[0].string.text, "abort-job") &&
+ strcmp(attr->values[0].string.text, "retry-job") &&
+ strcmp(attr->values[0].string.text, "stop-printer"))))
{
send_ipp_status(con, IPP_NOT_POSSIBLE,
_("Unknown printer-error-policy \"%s\"."),
diff --git a/scheduler/job.c b/scheduler/job.c
index c0aa5b0d6..19e0af1aa 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -458,7 +458,7 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
ipp_attribute_t *attr; /* Current attribute */
const char *ptr, /* Pointer into value */
*abort_message; /* Abort message */
- ipp_jstate_t abort_state = IPP_JOB_ABORTED;
+ ipp_jstate_t abort_state = IPP_JOB_STOPPED;
/* New job state on abort */
struct stat backinfo; /* Backend file information */
int backroot; /* Run backend as root? */
@@ -545,6 +545,8 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
job->current_file);
abort_message = "Aborting job because it cannot be printed.";
+ abort_state = IPP_JOB_ABORTED;
+
goto abort_job;
}
@@ -649,7 +651,6 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
cupsArrayDelete(filters);
- abort_state = IPP_JOB_STOPPED;
abort_message = "Stopping job because the scheduler ran out of memory.";
goto abort_job;
@@ -681,7 +682,6 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
cupsdLogJob(job, CUPSD_LOG_DEBUG,
"Unable to add port monitor - %s", strerror(errno));
- abort_state = IPP_JOB_STOPPED;
abort_message = "Stopping job because the scheduler ran out of memory.";
goto abort_job;
@@ -699,6 +699,8 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
cupsArrayCount(filters), MAX_FILTERS);
abort_message = "Aborting job because it needs too many filters to print.";
+ abort_state = IPP_JOB_ABORTED;
+
goto abort_job;
}
@@ -739,7 +741,6 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
if ((options = get_options(job, banner_page, copies, sizeof(copies), title,
sizeof(title))) == NULL)
{
- abort_state = IPP_JOB_STOPPED;
abort_message = "Stopping job because the scheduler ran out of memory.";
goto abort_job;
@@ -773,7 +774,6 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
cupsdLogMessage(CUPSD_LOG_DEBUG, "Unable to allocate argument array - %s",
strerror(errno));
- abort_state = IPP_JOB_STOPPED;
abort_message = "Stopping job because the scheduler ran out of memory.";
goto abort_job;
@@ -1048,7 +1048,7 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to start filter \"%s\" - %s.",
filter->filter, strerror(errno));
- abort_message = "Stopped job because the scheduler could not execute a "
+ abort_message = "Stopping job because the scheduler could not execute a "
"filter.";
goto abort_job;
@@ -2549,8 +2549,8 @@ finalize_job(cupsd_job_t *job) /* I - Job */
default :
case IPP_JOB_PROCESSING :
case IPP_JOB_COMPLETED :
- job_state = IPP_JOB_COMPLETED;
- message = "Job completed.";
+ job_state = IPP_JOB_COMPLETED;
+ message = "Job completed.";
break;
case IPP_JOB_STOPPED :
@@ -2684,14 +2684,12 @@ finalize_job(cupsd_job_t *job) /* I - Job */
message = "Job aborted due to backend errors; please consult "
"the error_log file for details.";
}
- else
+ else if (job->state_value == IPP_JOB_PROCESSING)
{
+ job_state = IPP_JOB_PENDING;
printer_state = IPP_PRINTER_STOPPED;
message = "Printer stopped due to backend errors; please "
"consult the error_log file for details.";
-
- if (job_state == IPP_JOB_COMPLETED)
- job_state = IPP_JOB_PENDING;
}
break;
diff --git a/scheduler/job.h b/scheduler/job.h
index 92a4b26ac..5d47056f8 100644
--- a/scheduler/job.h
+++ b/scheduler/job.h
@@ -29,7 +29,7 @@ typedef enum cupsd_jobaction_e /**** Actions for state changes ****/
* Job request structure...
*/
-typedef struct cupsd_job_s
+struct cupsd_job_s
{
int id, /* Job ID */
priority, /* Job priority */
@@ -82,7 +82,7 @@ typedef struct cupsd_job_s
krb5_ccache ccache; /* Kerberos credential cache */
char *ccname; /* KRB5CCNAME environment variable */
#endif /* HAVE_GSSAPI */
-} cupsd_job_t;
+};
/*
diff --git a/scheduler/main.c b/scheduler/main.c
index f90e74545..a38e14e61 100644
--- a/scheduler/main.c
+++ b/scheduler/main.c
@@ -1718,14 +1718,20 @@ process_children(void)
else
job->status = -status; /* Backend failed */
- if (job->status_level > CUPSD_LOG_ERROR)
+ if (job->state_value == IPP_JOB_PROCESSING &&
+ job->status_level > CUPSD_LOG_ERROR)
{
+ char message[1024]; /* New printer-state-message */
+
+
job->status_level = CUPSD_LOG_ERROR;
+ snprintf(message, sizeof(message), "%s failed", name);
+
if (job->printer)
{
- snprintf(job->printer->state_message,
- sizeof(job->printer->state_message), "%s failed", name);
+ strlcpy(job->printer->state_message, message,
+ sizeof(job->printer->state_message));
cupsdAddPrinterHistory(job->printer);
}
@@ -1745,7 +1751,7 @@ process_children(void)
if (job->printer_message)
cupsdSetString(&(job->printer_message->values[0].string.text),
- job->printer->state_message);
+ message);
}
}
diff --git a/scheduler/network.c b/scheduler/network.c
index 22634d343..95c6a9cab 100644
--- a/scheduler/network.c
+++ b/scheduler/network.c
@@ -155,7 +155,7 @@ cupsdNetIFUpdate(void)
* Try looking up the hostname for the address as needed...
*/
- if (HostNameLookups || RemoteAccessEnabled)
+ if (HostNameLookups || RemotePort)
httpAddrLookup((http_addr_t *)(addr->ifa_addr), hostname,
sizeof(hostname));
else
diff --git a/scheduler/printers.c b/scheduler/printers.c
index 6b5a70533..ba1be9b03 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
@@ -118,7 +118,8 @@ cupsdAddPrinter(const char *name) /* I - Name of printer */
cupsdSetString(&p->info, name);
cupsdSetString(&p->hostname, ServerName);
- cupsdSetStringf(&p->uri, "ipp://%s:%d/printers/%s", ServerName, LocalPort, name);
+ cupsdSetStringf(&p->uri, "ipp://%s:%d/printers/%s", ServerName, RemotePort,
+ name);
cupsdSetDeviceURI(p, "file:///dev/null");
p->state = IPP_PRINTER_STOPPED;
@@ -370,13 +371,6 @@ cupsdCreateCommonData(void)
"separate-documents-uncollated-copies",
"separate-documents-collated-copies"
};
- static const char * const errors[] = /* printer-error-policy-supported values */
- {
- "abort-job",
- "retry-current-job",
- "retry-job",
- "stop-printer"
- };
static const char * const notify_attrs[] =
{ /* notify-attributes-supported values */
"printer-state-change-time",
@@ -621,11 +615,6 @@ cupsdCreateCommonData(void)
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
"pdl-override-supported", NULL, "not-attempted");
- /* printer-error-policy-supported */
- ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
- "printer-error-policy-supported",
- sizeof(errors) / sizeof(errors[0]), NULL, errors);
-
/* printer-op-policy-supported */
attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
"printer-op-policy-supported", cupsArrayCount(Policies),
@@ -2923,7 +2912,7 @@ cupsdStopPrinter(cupsd_printer_t *p, /* I - Printer to stop */
* See if we have a job printing on this printer...
*/
- if (p->job)
+ if (p->job && p->job->state_value == IPP_JOB_PROCESSING)
cupsdSetJobState(p->job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
"Job stopped due to printer being paused.");
}
diff --git a/scheduler/printers.h b/scheduler/printers.h
index 127f9aa41..d601ccd14 100644
--- a/scheduler/printers.h
+++ b/scheduler/printers.h
@@ -34,6 +34,8 @@ typedef struct
* Printer/class information structure...
*/
+typedef struct cupsd_job_s cupsd_job_t;
+
typedef struct cupsd_printer_s
{
char *uri, /* Printer URI */
@@ -67,7 +69,7 @@ typedef struct cupsd_printer_s
mime_type_t *filetype, /* Pseudo-filetype for printer */
*prefiltertype; /* Pseudo-filetype for pre-filters */
cups_array_t *filetypes; /* Supported file types */
- void *job; /* Current job in queue */
+ cupsd_job_t *job; /* Current job in queue */
ipp_t *attrs, /* Attributes supported by this printer */
*ppd_attrs; /* Attributes based on the PPD */
int num_printers, /* Number of printers in class */
diff --git a/scheduler/type.c b/scheduler/type.c
index 6218b4d6f..5ce8fedf7 100644
--- a/scheduler/type.c
+++ b/scheduler/type.c
@@ -61,6 +61,30 @@ static int patmatch(const char *s, const char *pat);
/*
+ * Local globals...
+ */
+
+#ifdef DEBUG
+static const char * const debug_ops[] =
+ { /* Test names... */
+ "NOP", /* No operation */
+ "AND", /* Logical AND of all children */
+ "OR", /* Logical OR of all children */
+ "MATCH", /* Filename match */
+ "ASCII", /* ASCII characters in range */
+ "PRINTABLE", /* Printable characters (32-255) */
+ "STRING", /* String matches */
+ "CHAR", /* Character/byte matches */
+ "SHORT", /* Short/16-bit word matches */
+ "INT", /* Integer/32-bit word matches */
+ "LOCALE", /* Current locale matches string */
+ "CONTAINS", /* File contains a string */
+ "ISTRING" /* Case-insensitive string matches */
+ };
+#endif /* DEBUG */
+
+
+/*
* 'mimeAddType()' - Add a MIME type to a database.
*/
@@ -157,7 +181,7 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
logic = MIME_MAGIC_NOP;
invert = 0;
- DEBUG_printf(("mimeAddTypeRule: %s/%s: %s\n", mt->super, mt->type, rule));
+ DEBUG_printf(("mimeAddTypeRule: %s/%s: %s", mt->super, mt->type, rule));
while (*rule != '\0')
{
@@ -207,11 +231,11 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
current->prev = NULL;
current->parent = temp;
- DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p...\n", temp));
+ DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p...", temp));
}
- else
+ else if (current->parent)
{
- DEBUG_printf(("mimeAddTypeRule: Setting group %p op to AND...\n",
+ DEBUG_printf(("mimeAddTypeRule: Setting group %p op to AND...",
current->parent));
current->parent->op = MIME_MAGIC_AND;
}
@@ -239,7 +263,7 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
return (-1);
DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p inside OR "
- "group\n", temp));
+ "group", temp));
while (current->prev != NULL)
{
@@ -444,7 +468,7 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
*/
DEBUG_printf(("mimeAddTypeRule: Making new OR group %p for "
- "parenthesis...\n", temp));
+ "parenthesis...", temp));
temp->op = MIME_MAGIC_OR;
@@ -452,13 +476,16 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
return (-1);
temp->child->parent = temp;
+ temp->child->invert = temp->invert;
+ temp->invert = 0;
temp = temp->child;
logic = MIME_MAGIC_OR;
}
- DEBUG_printf(("mimeAddTypeRule: adding %p: %s, op=%d, logic=%d, "
- "invert=%d\n", temp, name, op, logic, invert));
+ DEBUG_printf(("mimeAddTypeRule: adding %p: %s, op=MIME_MAGIC_%s(%d), "
+ "logic=MIME_MAGIC_%s, invert=%d", temp, name, debug_ops[op],
+ op, debug_ops[logic], invert));
/*
* Fill in data for the rule...
@@ -546,7 +573,7 @@ mimeFileType(mime_t *mime, /* I - MIME database */
DEBUG_printf(("mimeFileType(mime=%p, pathname=\"%s\", filename=\"%s\", "
- "compression=%p)\n", mime, pathname, filename, compression));
+ "compression=%p)", mime, pathname, filename, compression));
/*
* Range check input parameters...
@@ -671,27 +698,9 @@ checkrules(const char *filename, /* I - Filename */
intv; /* Integer value */
short shortv; /* Short value */
unsigned char *bufptr; /* Pointer into buffer */
-#ifdef DEBUG
- const char * const debug_tests[] = /* Test names... */
- {
- "NOP", /* No operation */
- "AND", /* Logical AND of all children */
- "OR", /* Logical OR of all children */
- "MATCH", /* Filename match */
- "ASCII", /* ASCII characters in range */
- "PRINTABLE", /* Printable characters (32-255) */
- "STRING", /* String matches */
- "CHAR", /* Character/byte matches */
- "SHORT", /* Short/16-bit word matches */
- "INT", /* Integer/32-bit word matches */
- "LOCALE" /* Current locale matches string */
- "CONTAINS" /* File contains a string */
- "ISTRING" /* Case-insensitive string matches */
- };
-#endif /* DEBUG */
- DEBUG_printf(("checkrules(filename=\"%s\", fb=%p, rules=%p)\n", filename,
+ DEBUG_printf(("checkrules(filename=\"%s\", fb=%p, rules=%p)", filename,
fb, rules));
if (rules == NULL)
@@ -803,7 +812,7 @@ checkrules(const char *filename, /* I - Filename */
break;
case MIME_MAGIC_STRING :
- DEBUG_printf(("checkrules: string(%d, \"%s\")\n", rules->offset,
+ DEBUG_printf(("checkrules: string(%d, \"%s\")", rules->offset,
rules->value.stringv));
/*
@@ -823,7 +832,7 @@ checkrules(const char *filename, /* I - Filename */
fb->offset = rules->offset;
DEBUG_printf(("checkrules: loaded %d byte fb->buffer at %d, starts "
- "with \"%c%c%c%c\"...\n",
+ "with \"%c%c%c%c\"...",
fb->length, fb->offset, fb->buffer[0], fb->buffer[1],
fb->buffer[2], fb->buffer[3]));
}
@@ -838,7 +847,7 @@ checkrules(const char *filename, /* I - Filename */
else
result = (memcmp(fb->buffer + rules->offset - fb->offset,
rules->value.stringv, rules->length) == 0);
- DEBUG_printf(("checkrules: result=%d\n", result));
+ DEBUG_printf(("checkrules: result=%d", result));
break;
case MIME_MAGIC_ISTRING :
@@ -1039,8 +1048,8 @@ checkrules(const char *filename, /* I - Filename */
* the the rule set is false...
*/
- DEBUG_printf(("checkrules: result of test %p (MIME_MAGIC_%s) is %d\n",
- rules, debug_tests[rules->op], result));
+ DEBUG_printf(("checkrules: result of test %p (MIME_MAGIC_%s) is %d",
+ rules, debug_ops[rules->op], result));
if ((result && logic == MIME_MAGIC_OR) ||
(!result && logic == MIME_MAGIC_AND))
diff --git a/systemv/Makefile b/systemv/Makefile
index 67cb557e1..0df674a0f 100644
--- a/systemv/Makefile
+++ b/systemv/Makefile
@@ -49,7 +49,7 @@ unittests:
clean:
$(RM) $(OBJS) $(TARGETS)
- $(RM) accept cupsdisable cupsenable cupsreject disable enable reject
+ $(RM) accept cupsdisable cupsenable cupsreject reject
#
@@ -102,10 +102,6 @@ install-exec:
$(INSTALL_BIN) cancel $(BINDIR)
$(INSTALL_BIN) cupstestdsc $(BINDIR)
$(INSTALL_BIN) cupstestppd $(BINDIR)
- $(RM) $(BINDIR)/disable
- $(LN) cupsaccept $(BINDIR)/disable
- $(RM) $(BINDIR)/enable
- $(LN) cupsaccept $(BINDIR)/enable
$(INSTALL_BIN) lp $(BINDIR)
$(INSTALL_BIN) lpoptions $(BINDIR)
$(INSTALL_BIN) lpstat $(BINDIR)
@@ -140,8 +136,6 @@ uninstall:
$(RM) $(BINDIR)/cancel
$(RM) $(BINDIR)/cupstestdsc
$(RM) $(BINDIR)/cupstestppd
- $(RM) $(BINDIR)/disable
- $(RM) $(BINDIR)/enable
$(RM) $(BINDIR)/lp
$(RM) $(BINDIR)/lpoptions
$(RM) $(BINDIR)/lppasswd
@@ -177,7 +171,7 @@ cancel: cancel.o ../cups/$(LIBCUPS)
cupsaccept: cupsaccept.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o cupsaccept cupsaccept.o $(LIBS)
- for file in accept cupsenable cupsdisable cupsreject disable enable reject; do \
+ for file in accept cupsenable cupsdisable cupsreject reject; do \
$(RM) $$file; \
$(LN) cupsaccept $$file; \
done
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
index 9e27ba1fd..c0199a61a 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
@@ -415,6 +415,9 @@ fi
export LD_LIBRARY_PATH
LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2:$root/cgi-bin/libcupscgi.so.1:$root/scheduler/libcupsmime.so.1:$root/driver/libcupsdriver.so.1:$root/ppdc/libcupsppdc.so.1"
+if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
+ LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
+fi
export LD_PRELOAD
if test "x$DYLD_LIBRARY_PATH" = x; then
diff --git a/tools/makedocset b/tools/makedocset
index 46c87877b..e69de29bb 100644
--- a/tools/makedocset
+++ b/tools/makedocset
@@ -1,72 +0,0 @@
-#!/bin/sh
-#
-# "$Id$"
-#
-# Script to make Xcode documentation sets.
-#
-
-docversion="1.4.`svnversion . | sed -e '1,$s/[a-zA-Z]//g'`"
-docset=""
-sources=""
-header=""
-intro=""
-title=""
-
-while test $# -gt 0; do
- arg="$1"
- shift
-
- case "$arg" in
- --docset)
- docset="$1"
- shift
- ;;
- --header)
- header="$1"
- shift
- ;;
- --intro)
- intro="$1"
- shift
- ;;
- --title)
- title="$1"
- shift
- ;;
- *)
- sources="$sources $arg"
- ;;
- esac
-done
-
-echo "<h1>$title</h1>" >"$header.ds"
-sed -e '1,$s/<a href='"'"'/<a href='"'"'http:\/\/www.cups.org\/documentation.php\//g' < "$header" >>"$header.ds"
-sed -e '1,$s/\/images\///g' -e '1,$s/<a href='"'"'/<a href='"'"'http:\/\/www.cups.org\/documentation.php\//g' <"$intro" >"$intro.tmp"
-sed -e '1,$s/http:\/\/www.cups.org\/documentation\.php\/#/#/g' <"$intro.tmp" >"$intro.ds"
-
-mxmldoc --docset "$docset" --docversion "$docversion" \
- --feedname cups.org --feedurl http://www.cups.org/docsets.atom \
- --title "$title" --css ../doc/cups-printable.css \
- --header "$header.ds" --intro "$intro.ds" $sources || exit 1
-rm -f "$header.ds" "$intro.ds" "$intro.tmp"
-
-if test ! -d ../docsets; then
- mkdir ../docsets
-fi
-
-for image in `grep /images "$intro" | sed -e '1,$s/^.*\/images\///' -e '1,$s/\.png.*$/.png/'`; do
- cp ../doc/images/$image "$docset/Contents/Resources/Documentation"
-done
-
-xar="`basename \"$docset\" .docset`.xar"
-
-/Developer/usr/bin/docsetutil package --output "../docsets/$xar" \
- --atom ../docsets/docsets.atom \
- --download-url "http://www.cups.org/docsets/$xar" "$docset" || exit 1
-
-rm -rf "$docset"
-
-
-#
-# End of "$Id$".
-#