diff options
Diffstat (limited to 'src/cups/genppd.c')
-rw-r--r-- | src/cups/genppd.c | 239 |
1 files changed, 141 insertions, 98 deletions
diff --git a/src/cups/genppd.c b/src/cups/genppd.c index bdff9fe..f9011b4 100644 --- a/src/cups/genppd.c +++ b/src/cups/genppd.c @@ -1,5 +1,5 @@ /* - * "$Id: genppd.c,v 1.113 2005/12/31 21:27:29 rlk Exp $" + * "$Id: genppd.c,v 1.117 2006/04/22 00:41:04 rlk Exp $" * * PPD file generation program for the CUPS drivers. * @@ -124,7 +124,6 @@ const char *special_options[] = "Resolution", "OutputOrder", "Quality", - "ImageType", "Duplex", NULL }; @@ -161,7 +160,7 @@ int checkcat (const struct dirent *localedir); void printlangs(char** langs); void printmodels(int verbose); int write_ppd(const stp_printer_t *p, const char *prefix, - const char *language, int verbose); + const char *language, int verbose, int simplified); /* @@ -218,6 +217,7 @@ main(int argc, /* I - Number of command-line arguments */ char **models = NULL; /* Models to output, all if NULL */ int opt_printlangs = 0; /* Print available translations */ int opt_printmodels = 0;/* Print available models */ + int which_ppds = 2; /* Simplified PPD's = 1, full = 2 */ /* * Parse command-line args... @@ -227,7 +227,7 @@ main(int argc, /* I - Number of command-line arguments */ for (;;) { - if ((i = getopt(argc, argv, "23hvqc:p:l:LMVd:")) == -1) + if ((i = getopt(argc, argv, "23hvqc:p:l:LMVd:sa")) == -1) break; switch (i) @@ -271,6 +271,12 @@ main(int argc, /* I - Number of command-line arguments */ case 'd': cups_modeldir = optarg; break; + case 's': + which_ppds = 1; + break; + case 'a': + which_ppds = 3; + break; case 'V': printf("cups-genppd version %s, " "Copyright (c) 1993-2005 by Easy Software Products and Robert Krawitz.\n\n", @@ -413,7 +419,11 @@ main(int argc, /* I - Number of command-line arguments */ if (printer) { - if (write_ppd(printer, prefix, language, verbose)) + if ((which_ppds & 1) && + write_ppd(printer, prefix, language, verbose, 1)) + return 1; + if ((which_ppds & 2) && + write_ppd(printer, prefix, language, verbose, 0)) return 1; } else @@ -430,8 +440,15 @@ main(int argc, /* I - Number of command-line arguments */ { printer = stp_get_printer_by_index(i); - if (printer && write_ppd(printer, prefix, language, verbose)) - return (1); + if (printer) + { + if ((which_ppds & 1) && + write_ppd(printer, prefix, language, verbose, 1)) + return (1); + if ((which_ppds & 2) && + write_ppd(printer, prefix, language, verbose, 0)) + return (1); + } } } if (!verbose) @@ -458,7 +475,7 @@ void usage(void) { puts("Usage: cups-genppd [-c localedir] " - "[-l locale] [-p prefix] [-q] [-v] models...\n" + "[-l locale] [-p prefix] [-s | -a] [-q] [-v] models...\n" " cups-genppd -L [-c localedir]\n" " cups-genppd -M [-v]\n" " cups-genppd -h\n" @@ -484,6 +501,8 @@ help(void) " -l locale Output PPDs translated with messages for locale.\n" " -p prefix Output PPDs in directory prefix.\n" " -d prefix Embed directory prefix in PPD file.\n" + " -s Generate simplified PPD files.\n" + " -a Generate all (simplified and full) PPD files.\n" " -q Quiet mode.\n" " -v Verbose mode.\n" "models:\n" @@ -745,7 +764,8 @@ int /* O - Exit status */ write_ppd(const stp_printer_t *p, /* I - Printer driver */ const char *prefix, /* I - Prefix (directory) for PPD files */ const char *language, - int verbose) + int verbose, + int simplified) { int i, j, k, l; /* Looping vars */ gzFile fp; /* File to write to */ @@ -772,8 +792,9 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ stp_parameter_list_t param_list; const stp_param_string_t *opt; int has_quality_parameter = 0; - int has_image_type_parameter = 0; int printer_is_color = 0; + int maximum_level = simplified ? + STP_PARAMETER_LEVEL_BASIC : STP_PARAMETER_LEVEL_ADVANCED4; /* * Initialize driver-specific variables... @@ -819,8 +840,9 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ * * stp-escp2-ex.5.0.ppd.gz */ - snprintf(filename, sizeof(filename) - 1, "%s/stp-%s.%s%s%s", - prefix, driver, GUTENPRINT_RELEASE_VERSION, ppdext, gzext); + snprintf(filename, sizeof(filename) - 1, "%s/stp-%s.%s%s%s%s", + prefix, driver, GUTENPRINT_RELEASE_VERSION, + simplified ? ".sim" : "", ppdext, gzext); /* * Open the PPD file... @@ -877,7 +899,8 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ */ gzprintf(fp, "*PCFileName: \"STP%05d.PPD\"\n", - stp_get_printer_index_by_driver(driver)); + stp_get_printer_index_by_driver(driver) + + simplified ? stp_printer_model_count() : 0); gzprintf(fp, "*Manufacturer: \"%s\"\n", manufacturer); /* @@ -909,8 +932,9 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ * If this is changed, the corresponding change must be made in * rastertoprinter.c. Look for "ppd->nickname" */ - gzprintf(fp, "*NickName: \"%s%s%s\"\n", - long_name, CUPS_PPD_NICKNAME_STRING, VERSION); + gzprintf(fp, "*NickName: \"%s%s%s%s\"\n", + long_name, CUPS_PPD_NICKNAME_STRING, VERSION, + simplified ? " Simplified" : ""); if (cups_ppd_ps_level == 2) gzputs(fp, "*PSVersion: \"(2017.000) 550\"\n"); else @@ -965,12 +989,13 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ gzputs(fp, "*cupsFilter: \"application/vnd.cups-command 33 commandtoepson\"\n"); gzputs(fp, "\n"); gzprintf(fp, "*StpDriverName: \"%s\"\n", driver); - gzprintf(fp, "*StpPPDLocation: \"%s%s%s/stp-%s.%s%s%s\"\n", + gzprintf(fp, "*StpPPDLocation: \"%s%s%s/stp-%s.%s%s%s%s\"\n", cups_modeldir, cups_modeldir[strlen(cups_modeldir) - 1] == '/' ? "" : "/", language ? language : "C", driver, GUTENPRINT_RELEASE_VERSION, + simplified ? ".sim" : "", ppdext, gzext); gzprintf(fp, "*StpLocale: \"%s\"\n", language ? language : "C"); @@ -1006,6 +1031,10 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ variable_sizes = 1; continue; } + if (simplified && num_opts >= 10 && + (papersize->paper_unit == PAPERSIZE_ENGLISH_EXTENDED || + papersize->paper_unit == PAPERSIZE_METRIC_EXTENDED)) + continue; width = papersize->width; height = papersize->height; @@ -1016,7 +1045,16 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ stp_set_string_parameter(v, "PageSize", opt->name); stp_get_media_size(v, &width, &height); - stp_get_imageable_area(v, &left, &right, &bottom, &top); + stp_get_maximum_imageable_area(v, &left, &right, &bottom, &top); + + if (left < 0) + left = 0; + if (right > width) + right = width; + if (bottom > height) + bottom = height; + if (top < 0) + top = 0; the_papers[cur_opt].name = opt->name; the_papers[cur_opt].text = opt->text; @@ -1085,7 +1123,15 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ &min_width, &min_height); stp_set_string_parameter(v, "PageSize", "Custom"); stp_get_media_size(v, &width, &height); - stp_get_imageable_area(v, &left, &right, &bottom, &top); + stp_get_maximum_imageable_area(v, &left, &right, &bottom, &top); + if (left < 0) + left = 0; + if (top < 0) + top = 0; + if (bottom > height) + bottom = height; + if (right > width) + width = right; gzprintf(fp, "*MaxMediaWidth: \"%d\"\n", max_width); gzprintf(fp, "*MaxMediaHeight: \"%d\"\n", max_height); @@ -1120,52 +1166,67 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ gzprintf(fp, "*ColorModel Gray/Grayscale:\t\"<<" "/cupsColorSpace %d" "/cupsColorOrder %d" + "%s" ">>setpagedevice\"\n", - CUPS_CSPACE_W, CUPS_ORDER_CHUNKED); + CUPS_CSPACE_W, CUPS_ORDER_CHUNKED, + simplified ? "/cupsBitsPerColor 8" : ""); gzprintf(fp, "*ColorModel Black/Inverted Grayscale:\t\"<<" "/cupsColorSpace %d" "/cupsColorOrder %d" + "%s" ">>setpagedevice\"\n", - CUPS_CSPACE_K, CUPS_ORDER_CHUNKED); + CUPS_CSPACE_K, CUPS_ORDER_CHUNKED, + simplified ? "/cupsBitsPerColor 8" : ""); if (printer_is_color) { gzprintf(fp, "*ColorModel RGB/RGB Color:\t\"<<" "/cupsColorSpace %d" "/cupsColorOrder %d" + "%s" ">>setpagedevice\"\n", - CUPS_CSPACE_RGB, CUPS_ORDER_CHUNKED); + CUPS_CSPACE_RGB, CUPS_ORDER_CHUNKED, + simplified ? "/cupsBitsPerColor 8" : ""); gzprintf(fp, "*ColorModel CMY/CMY Color:\t\"<<" "/cupsColorSpace %d" "/cupsColorOrder %d" + "%s" ">>setpagedevice\"\n", - CUPS_CSPACE_CMY, CUPS_ORDER_CHUNKED); + CUPS_CSPACE_CMY, CUPS_ORDER_CHUNKED, + simplified ? "/cupsBitsPerColor 8" : ""); gzprintf(fp, "*ColorModel CMYK/CMYK:\t\"<<" "/cupsColorSpace %d" "/cupsColorOrder %d" + "%s" ">>setpagedevice\"\n", - CUPS_CSPACE_CMYK, CUPS_ORDER_CHUNKED); + CUPS_CSPACE_CMYK, CUPS_ORDER_CHUNKED, + simplified ? "/cupsBitsPerColor 8" : ""); gzprintf(fp, "*ColorModel KCMY/KCMY:\t\"<<" "/cupsColorSpace %d" "/cupsColorOrder %d" + "%s" ">>setpagedevice\"\n", - CUPS_CSPACE_KCMY, CUPS_ORDER_CHUNKED); + CUPS_CSPACE_KCMY, CUPS_ORDER_CHUNKED, + simplified ? "/cupsBitsPerColor 8" : ""); } gzputs(fp, "*CloseUI: *ColorModel\n\n"); - /* - * 8 or 16 bit color (16 bit is slower) - */ - gzputs(fp, "*OpenUI *StpColorPrecision/Color Precision: PickOne\n"); - gzputs(fp, "*OrderDependency: 10 AnySetup *StpColorPrecision\n"); - gzputs(fp, "*DefaultStpColorPrecision: Normal\n"); - gzputs(fp, "*StpColorPrecision Normal/Normal:\t\"<<" - "/cupsBitsPerColor 8>>setpagedevice\"\n"); - gzputs(fp, "*StpColorPrecision Best/Best:\t\"<<" - "/cupsBitsPerColor 8" - "/cupsPreferredBitsPerColor 16>>setpagedevice\"\n"); - gzputs(fp, "*CloseUI: *StpColorPrecision\n\n"); + if (!simplified) + { + /* + * 8 or 16 bit color (16 bit is slower) + */ + gzputs(fp, "*OpenUI *StpColorPrecision/Color Precision: PickOne\n"); + gzputs(fp, "*OrderDependency: 10 AnySetup *StpColorPrecision\n"); + gzputs(fp, "*DefaultStpColorPrecision: Normal\n"); + gzputs(fp, "*StpColorPrecision Normal/Normal:\t\"<<" + "/cupsBitsPerColor 8>>setpagedevice\"\n"); + gzputs(fp, "*StpColorPrecision Best/Best:\t\"<<" + "/cupsBitsPerColor 8" + "/cupsPreferredBitsPerColor 16>>setpagedevice\"\n"); + gzputs(fp, "*CloseUI: *StpColorPrecision\n\n"); + } /* * Media types... @@ -1252,67 +1313,49 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ stp_clear_string_parameter(v, "Quality"); /* - * Image type - */ - - stp_describe_parameter(v, "ImageType", &desc); - if (desc.p_type == STP_PARAMETER_TYPE_STRING_LIST && desc.is_active) - { - has_image_type_parameter = 1; - gzprintf(fp, "*OpenUI *StpImageType/%s: PickOne\n", _(desc.text)); - gzputs(fp, "*OrderDependency: 5 AnySetup *StpImageType\n"); - gzprintf(fp, "*DefaultStpImageType: %s\n", desc.deflt.str); - num_opts = stp_string_list_count(desc.bounds.str); - for (i = 0; i < num_opts; i++) - { - opt = stp_string_list_param(desc.bounds.str, i); - gzprintf(fp, "*StpImageType %s/%s: \"\"\n", opt->name, opt->text); - } - gzputs(fp, "*CloseUI: *StpImageType\n\n"); - } - stp_parameter_description_destroy(&desc); - - /* * Resolutions... */ stp_describe_parameter(v, "Resolution", &desc); num_opts = stp_string_list_count(desc.bounds.str); - gzprintf(fp, "*OpenUI *Resolution/%s: PickOne\n", _("Resolution")); - gzputs(fp, "*OrderDependency: 20 AnySetup *Resolution\n"); - if (has_quality_parameter) - gzprintf(fp, "*DefaultResolution: None\n"); - else - gzprintf(fp, "*DefaultResolution: %s\n", desc.deflt.str); + if (!simplified || desc.p_level == STP_PARAMETER_LEVEL_BASIC) + { + gzprintf(fp, "*OpenUI *Resolution/%s: PickOne\n", _("Resolution")); + gzputs(fp, "*OrderDependency: 20 AnySetup *Resolution\n"); + if (has_quality_parameter) + gzprintf(fp, "*DefaultResolution: None\n"); + else + gzprintf(fp, "*DefaultResolution: %s\n", desc.deflt.str); - stp_clear_string_parameter(v, "Quality"); - if (has_quality_parameter) - gzprintf(fp, "*Resolution None/%s: \"\"\n", _("Automatic")); - for (i = 0; i < num_opts; i ++) - { - /* - * Strip resolution name to its essentials... - */ - opt = stp_string_list_param(desc.bounds.str, i); - stp_set_string_parameter(v, "Resolution", opt->name); - stp_describe_resolution(v, &xdpi, &ydpi); + stp_clear_string_parameter(v, "Quality"); + if (has_quality_parameter) + gzprintf(fp, "*Resolution None/%s: \"\"\n", _("Automatic")); + for (i = 0; i < num_opts; i ++) + { + /* + * Strip resolution name to its essentials... + */ + opt = stp_string_list_param(desc.bounds.str, i); + stp_set_string_parameter(v, "Resolution", opt->name); + stp_describe_resolution(v, &xdpi, &ydpi); - /* This should not happen! */ - if (xdpi == -1 || ydpi == -1) - continue; + /* This should not happen! */ + if (xdpi == -1 || ydpi == -1) + continue; - /* - * Write the resolution option... - */ + /* + * Write the resolution option... + */ - gzprintf(fp, "*Resolution %s/%s:\t\"<</HWResolution[%d %d]/cupsCompression %d>>setpagedevice\"\n", - opt->name, opt->text, xdpi, ydpi, i + 1); - } + gzprintf(fp, "*Resolution %s/%s:\t\"<</HWResolution[%d %d]/cupsCompression %d>>setpagedevice\"\n", + opt->name, opt->text, xdpi, ydpi, i + 1); + } - stp_parameter_description_destroy(&desc); + gzputs(fp, "*CloseUI: *Resolution\n\n"); + } - gzputs(fp, "*CloseUI: *Resolution\n\n"); + stp_parameter_description_destroy(&desc); stp_describe_parameter(v, "OutputOrder", &desc); if (desc.p_type == STP_PARAMETER_TYPE_STRING_LIST) @@ -1361,7 +1404,7 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ for (j = 0; j <= STP_PARAMETER_CLASS_OUTPUT; j++) { - for (k = 0; k <= STP_PARAMETER_LEVEL_ADVANCED4; k++) + for (k = 0; k <= maximum_level; k++) { int printed_open_group = 0; size_t param_count = stp_parameter_list_count(param_list); @@ -1450,14 +1493,17 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ gzprintf(fp, "*Stp%s None/%.3f: \"\"\n", desc.name, desc.deflt.dbl); gzprintf(fp, "*CloseUI: *Stp%s\n\n", desc.name); - gzprintf(fp, "*OpenUI *StpFine%s/%s %s: PickOne\n", - desc.name, _(desc.text), _("Fine Adjustment")); - gzprintf(fp, "*DefaultStpFine%s:None\n", desc.name); - gzprintf(fp, "*StpFine%s None/0.000: \"\"\n", desc.name); - for (i = 0; i < 100; i += 5) - gzprintf(fp, "*StpFine%s %d/%.3f: \"\"\n", - desc.name, i, ((double) i) * .001); - gzprintf(fp, "*CloseUI: *StpFine%s\n\n", desc.name); + if (!simplified) + { + gzprintf(fp, "*OpenUI *StpFine%s/%s %s: PickOne\n", + desc.name, _(desc.text), _("Fine Adjustment")); + gzprintf(fp, "*DefaultStpFine%s:None\n", desc.name); + gzprintf(fp, "*StpFine%s None/0.000: \"\"\n", desc.name); + for (i = 0; i < 100; i += 5) + gzprintf(fp, "*StpFine%s %d/%.3f: \"\"\n", + desc.name, i, ((double) i) * .001); + gzprintf(fp, "*CloseUI: *StpFine%s\n\n", desc.name); + } print_close_ui = 0; break; @@ -1479,9 +1525,6 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ gzprintf(fp, "*Stp%s %d/%.1f mm: \"\"\n", desc.name, i, ((double) i) * 25.4 / 72); } - gzprintf(fp, "*CloseUI: *Stp%s\n\n", desc.name); - print_close_ui = 0; - break; default: break; @@ -1551,5 +1594,5 @@ write_ppd(const stp_printer_t *p, /* I - Printer driver */ /* - * End of "$Id: genppd.c,v 1.113 2005/12/31 21:27:29 rlk Exp $". + * End of "$Id: genppd.c,v 1.117 2006/04/22 00:41:04 rlk Exp $". */ |