diff options
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 @@ -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> </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 Binary files differdeleted file mode 100644 index d77f3c8f6..000000000 --- a/doc/favicon.png +++ /dev/null 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 "required" 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 "database"...">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 "required" variables.</p> +<p class="code"> +int cgiCheckVariables (<br> + 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> + 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> + FILE *out,<br> + 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> + 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> + void *search,<br> + 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> + char *dst,<br> + const char *src,<br> + 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> + 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> + const char *name,<br> + 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> + ipp_t *request,<br> + 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> + ipp_t *response,<br> + 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> + 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> + 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 "database"...</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> + http_t *http,<br> + const char *dest,<br> + 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> + http_t *http,<br> + const char *dest,<br> + const char *command,<br> + 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> + http_t *http,<br> + 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> + const char *uri,<br> + char *url,<br> + int urlsize,<br> + 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> + const char *name,<br> + int element,<br> + 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> + ipp_attribute_t *obj,<br> + const char *prefix,<br> + 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> + ipp_t *response,<br> + const char *filter_name,<br> + const char *filter_value,<br> + const char *prefix,<br> + 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> + const char *name,<br> + 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> + const char *name,<br> + 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> + 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> + http_t *http,<br> + 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> + 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> + 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> + <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> + <a href="#help_index_t">help_index_t</a> *hi,<br> + const char *filename,<br> + 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> + const char *hifile,<br> + 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> + <a href="#help_index_t">help_index_t</a> *hi,<br> + 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> + <a href="#help_index_t">help_index_t</a> *hi,<br> + const char *query,<br> + const char *section,<br> + 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> + size_t filesize;<br> + 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> + cups_array_t *nodes;<br> + int search;<br> + 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> + char *anchor;<br> + char *filename;<br> + size_t length;<br> + time_t mtime;<br> + off_t offset;<br> + int score;<br> + char *section;<br> + char *text;<br> + 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> + int count;<br> + 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"> CUPS 1.4 </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> + const char *prompt,<br> + http_t *http,<br> + const char *method,<br> + 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 ("GET", "POST", "PUT")</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"> DEPRECATED </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"> CUPS 1.4 </span><a name="cupsSetPasswordCB2">cupsSetPasswordCB2</a></h3> +<p class="description">Set the advanced password callback for CUPS.</p> +<p class="code"> +void cupsSetPasswordCB2 (<br> + <a href="#cups_password_cb2_t">cups_password_cb2_t</a> cb,<br> + 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"> CUPS 1.4 </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"> CUPS 1.4 </span></dt> +<dd class="description">Printer with scanning capabilities </dd> <dt>CUPS_PRINTER_NOT_SHARED <span class="info"> CUPS 1.2/Mac OS X 10.5 </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"> CUPS 1.4 </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> + <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> + const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + const unsigned char *input,<br> + short *output,<br> + 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> + const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + const unsigned char *input,<br> + short *output,<br> + 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> + const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + const unsigned char *input,<br> + short *output,<br> + 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> + const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + const unsigned char *input,<br> + short *output,<br> + 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> + ppd_file_t *ppd,<br> + const char *colormodel,<br> + const char *media,<br> + 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> + 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> + <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + float lower,<br> + 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> + <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + int channel,<br> + int num_xypoints,<br> + 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> + <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + int channel,<br> + float gamval,<br> + 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> + <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + 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> + <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br> + int channel,<br> + float light,<br> + 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> + const unsigned char *bytes,<br> + 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> + const unsigned char *bytes,<br> + int length,<br> + 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> + <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> + <a href="#cups_dither_t">cups_dither_t</a> *d,<br> + const <a href="#cups_lut_t">cups_lut_t</a> *lut,<br> + const short *data,<br> + int num_channels,<br> + 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> + 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> + ppd_file_t *ppd,<br> + const char *name,<br> + const char *colormodel,<br> + const char *media,<br> + const char *resolution,<br> + char *spec,<br> + 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> + <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> + ppd_file_t *ppd,<br> + const char *colormodel,<br> + const char *media,<br> + const char *resolution,<br> + 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> + int num_values,<br> + 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> + const unsigned char *ipixels,<br> + unsigned char *obytes,<br> + int width,<br> + const unsigned char clearto,<br> + 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> + const unsigned char *ipixels,<br> + unsigned char *obytes,<br> + int width,<br> + 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> + const unsigned char *ipixels,<br> + unsigned char *obytes,<br> + int width,<br> + const unsigned char clearto,<br> + 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> + const unsigned char *ipixels,<br> + unsigned char *obytes,<br> + int width,<br> + const unsigned char bit,<br> + 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> + <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> + <a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr,<br> + const unsigned char *input,<br> + unsigned char *output,<br> + 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> + <a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr,<br> + const unsigned char *input,<br> + unsigned char *output,<br> + 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> + ppd_file_t *ppd,<br> + const char *colormodel,<br> + const char *media,<br> + 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> + int num_samples,<br> + <a href="#cups_sample_t">cups_sample_t</a> *samples,<br> + int cube_size,<br> + 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> + unsigned char black_lut[256];<br> + short *channels[CUPS_MAX_CHAN];<br> + unsigned char color_lut[256];<br> + int ink_limit;<br> + 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> + int errors[96];<br> + int row;<br> + 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> + int error;<br> + short intensity;<br> + 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> + unsigned char black[CUPS_MAX_RGB];<br> + int cache_init;<br> + unsigned char ****colors;<br> + int cube_index[256];<br> + int cube_mult[256];<br> + int cube_size;<br> + int num_channels;<br> + 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> + unsigned char colors[CUPS_MAX_RGB];<br> + 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"> CUPS 1.2/Mac OS X 10.5 </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"> CUPS 1.2/Mac OS X 10.5 </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"> CUPS1.2 </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"> CUPS 1.2/Mac OS X 10.5 </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> char boolean;<br> <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"> CUPS1.2 </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> + <a href="#mime_t">mime_t</a> *mime,<br> + <a href="#mime_type_t">mime_type_t</a> *src,<br> + <a href="#mime_type_t">mime_type_t</a> *dst,<br> + int cost,<br> + 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> + <a href="#mime_t">mime_t</a> *mime,<br> + const char *super,<br> + 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> + <a href="#mime_type_t">mime_type_t</a> *mt,<br> + 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> + <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> + <a href="#mime_t">mime_t</a> *mime,<br> + <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> + <a href="#mime_t">mime_t</a> *mime,<br> + <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> + <a href="#mime_t">mime_t</a> *mime,<br> + const char *pathname,<br> + const char *filename,<br> + 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> + <a href="#mime_t">mime_t</a> *mime,<br> + <a href="#mime_type_t">mime_type_t</a> *src,<br> + <a href="#mime_type_t">mime_type_t</a> *dst,<br> + 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> + <a href="#mime_t">mime_t</a> *mime,<br> + <a href="#mime_type_t">mime_type_t</a> *src,<br> + <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->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> + <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> + <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> + const char *pathname,<br> + 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> + <a href="#mime_t">mime_t</a> *mime,<br> + const char *pathname,<br> + 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> + <a href="#mime_t">mime_t</a> *mime,<br> + 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> + <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> + <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> + <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> + <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> + <a href="#mime_t">mime_t</a> *mime,<br> + const char *super,<br> + 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"> CUPS 1.1.19/Mac OS X 10.3 </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"> CUPS 1.1.19/Mac OS X 10.3 </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"> CUPS 1.1.19/Mac OS X 10.3 </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> + public:<br> + int count, alloc, current;<br> + <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> + 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> + <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> + <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> + <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> + public:<br> + bool localizable;<br> + <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> + const char *n,<br> + const char *s,<br> + const char *t,<br> + const char *v,<br> + 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> + public:<br> + <a href="#ppdcString">ppdcString</a> *filename;<br> + <a href="#ppdcString">ppdcString</a> *locale;<br> + <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> + void add_message(const char *id,<br> + 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> + const char *id,<br> + 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> + 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> + 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> + const char *l,<br> + 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> + 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> + public:<br> + <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> + const char *n,<br> + const char *t,<br> + 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> + public:<br> + <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> + const char *o1,<br> + const char *c1,<br> + const char *o2,<br> + 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> + public:<br> + <a href="#ppdcArray">ppdcArray</a> *copyright;<br> + <a href="#ppdcString">ppdcString</a> *custom_size_code;<br> + <a href="#ppdcString">ppdcString</a> *default_font, *default_size;<br> + float left_margin, bottom_margin, right_margin, top_margin, max_width, max_length, min_width, min_length;<br> + <a href="#ppdcArray">ppdcArray</a> *attrs, *constraints, *filters, *fonts, *groups, *profiles, *sizes;<br> + int model_number, manual_copies, color_device, throughput;<br> + <a href="#ppdcDrvType">ppdcDrvType</a> type;<br> + int variable_paper_size;<br> + <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> + 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> + <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> + 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> + <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> + <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> + <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> + <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> + <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> + const char *k,<br> + 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> + 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> + 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> + <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> + 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> + <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> + <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> + 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> + 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> + 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> + 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> + 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> + cups_file_t *fp,<br> + <a href="#ppdcCatalog">ppdcCatalog</a> *catalog,<br> + <a href="#ppdcArray">ppdcArray</a> *locales,<br> + <a href="#ppdcSource">ppdcSource</a> *src,<br> + <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> + public:<br> + const char *filename;<br> + cups_file_t *fp;<br> + 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> + const char *f,<br> + 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> + public:<br> + int cost;<br> + <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> + const char *t,<br> + const char *p,<br> + 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> + public:<br> + <a href="#ppdcString">ppdcString</a> *name, *encoding, *version, *charset;<br> + <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> + const char *n,<br> + const char *e,<br> + const char *v,<br> + const char *c,<br> + <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> + public:<br> + <a href="#ppdcArray">ppdcArray</a> *options;<br> + <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> + 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> + 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> + <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> + public:<br> + 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> + 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> + public:<br> + <a href="#ppdcString">ppdcString</a> *size_code, *region_code;<br> + <a href="#ppdcString">ppdcString</a> *name, *text;<br> + 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> + const char *n,<br> + const char *t,<br> + float w,<br> + float l,<br> + float lm,<br> + float bm,<br> + float rm,<br> + float tm,<br> + const char *sc,<br> + 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> + public:<br> + <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> + const char *i,<br> + 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> + public:<br> + <a href="#ppdcArray">ppdcArray</a> *choices;<br> + <a href="#ppdcString">ppdcString</a> *defchoice;<br> + float order;<br> + <a href="#ppdcOptSection">ppdcOptSection</a> section;<br> + <a href="#ppdcString">ppdcString</a> *name, *text;<br> + <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> + 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> + 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> + <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> + <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> + public:<br> + <a href="#ppdcString">ppdcString</a> *resolution, *media_type;<br> + 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> + const char *r,<br> + const char *m,<br> + float d,<br> + float g,<br> + 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> + private:<br> + 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> + public:<br> + int cond_state, *cond_current, cond_stack[101];<br> + static const char *driver_types[];<br> + <a href="#ppdcString">ppdcString</a> *filename;<br> + static <a href="#ppdcArray">ppdcArray</a> *includes;<br> + <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> + 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> + 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> + 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> + const char *f,<br> + const char *base,<br> + char *n,<br> + 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> + 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> + 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> + 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> + <a href="#ppdcFile">ppdcFile</a> *fp,<br> + 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> + <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> + <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> + <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> + 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> + <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> + 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> + <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> + <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> + <a href="#ppdcFile">ppdcFile</a> *fp,<br> + <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> + <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> + <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> + <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> + <a href="#ppdcFile">ppdcFile</a> *fp,<br> + const char *keyword,<br> + const char *tattr,<br> + 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> + <a href="#ppdcFile">ppdcFile</a> *fp,<br> + <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> + <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> + <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> + <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> + <a href="#ppdcFile">ppdcFile</a> *fp,<br> + <a href="#ppdcDriver">ppdcDriver</a> *d,<br> + <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> + <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> + <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> + <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> + <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> + <a href="#ppdcFile">ppdcFile</a> *fp,<br> + char *buffer,<br> + 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> + <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> + 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> + const char *f,<br> + 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> + cups_file_t *fp,<br> + const char *format,<br> + ...<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> + const char *f,<br> + 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> + <a href="#ppdcFile">ppdcFile</a> *fp,<br> + <a href="#ppdcDriver">ppdcDriver</a> *td,<br> + 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> + const char *name,<br> + 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> + 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> + public:<br> + 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> + 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> + public:<br> + <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> + 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> + const char *n,<br> + 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> + 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"> CUPS 1.1.19/Mac OS X 10.3 </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"> -<Class name> - ... - ErrorPolicy abort-job -</Class> -</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$". -# |