X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=filter%2Fimagetoraster.c;h=e1add90cc5d61a586c4ac1729504817aa244be46;hb=771bd8cbffe1ffb06d90b2c7f00191830e6b738c;hp=c57275b7a5195f3252587760cb0b988559fb2014;hpb=ed6e7faf3e76edf2b4dbcf38fdbfbfe5c387550a;p=thirdparty%2Fcups.git diff --git a/filter/imagetoraster.c b/filter/imagetoraster.c index c57275b7a..e1add90cc 100644 --- a/filter/imagetoraster.c +++ b/filter/imagetoraster.c @@ -1,9 +1,9 @@ /* * "$Id: imagetoraster.c 7306 2008-02-15 00:52:38Z mike $" * - * Image file to raster filter for the Common UNIX Printing System (CUPS). + * Image file to raster filter for CUPS. * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2011 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -39,7 +39,8 @@ #include "image-private.h" #include #include -#include +#include +#include /* @@ -198,14 +199,21 @@ main(int argc, /* I - Number of command-line arguments */ setbuf(stderr, NULL); + /* + * Ignore broken pipe signals... + */ + + signal(SIGPIPE, SIG_IGN); + /* * Check command-line... */ if (argc < 6 || argc > 7) { - fprintf(stderr, _("Usage: %s job-id user title copies options [file]\n"), - argv[0]); + _cupsLangPrintf(stderr, + _("Usage: %s job-id user title copies options file"), + argv[0]); return (1); } @@ -231,7 +239,7 @@ main(int argc, /* I - Number of command-line arguments */ if (pipe(mypipes)) { - perror("ERROR: Unable to create pipes for imagetops | pstoraster"); + _cupsLangPrintError("ERROR", _("Unable to create pipes for filters")); return (errno); } @@ -241,14 +249,12 @@ main(int argc, /* I - Number of command-line arguments */ * Child process for pstoraster... Assign new pipe input to pstoraster... */ - close(0); - dup(mypipes[0]); + dup2(mypipes[0], 0); close(mypipes[0]); close(mypipes[1]); execlp("pstoraster", argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], NULL); - perror("ERROR: Unable to exec pstoraster"); return (errno); } else if (pid < 0) @@ -257,7 +263,7 @@ main(int argc, /* I - Number of command-line arguments */ * Error! */ - perror("ERROR: Unable to fork pstoraster"); + _cupsLangPrintError("ERROR", _("Unable to fork filter")); return (errno); } @@ -265,19 +271,17 @@ main(int argc, /* I - Number of command-line arguments */ * Update stdout so it points at the new pstoraster... */ - close(1); - dup(mypipes[1]); + dup2(mypipes[1], 1); close(mypipes[0]); close(mypipes[1]); /* - * Run imagetops to get the classification or page labelling that was + * Run imagetops to get the classification or page labeling that was * requested... */ execlp("imagetops", argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], NULL); - perror("ERROR: Unable to exec imagetops"); return (errno); } @@ -294,11 +298,12 @@ main(int argc, /* I - Number of command-line arguments */ if ((fd = cupsTempFd(filename, sizeof(filename))) < 0) { - perror("ERROR: Unable to copy image file"); + _cupsLangPrintError("ERROR", _("Unable to copy print file")); return (1); } - fprintf(stderr, "DEBUG: imagetoraster - copying to temp print file \"%s\"\n", + fprintf(stderr, + "DEBUG: imagetoraster - copying to temp print file \"%s\".\n", filename); while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) @@ -336,11 +341,11 @@ main(int argc, /* I - Number of command-line arguments */ * separate-documents-collated-copies allows for uncollated copies. */ - Collate = strcasecmp(val, "separate-documents-collated-copies") != 0; + Collate = _cups_strcasecmp(val, "separate-documents-collated-copies") != 0; } if ((val = cupsGetOption("Collate", num_options, options)) != NULL && - strcasecmp(val, "True") == 0) + _cups_strcasecmp(val, "True") == 0) Collate = 1; if ((val = cupsGetOption("gamma", num_options, options)) != NULL) @@ -374,10 +379,10 @@ main(int argc, /* I - Number of command-line arguments */ if ((val = cupsGetOption("scaling", num_options, options)) != NULL) zoom = atoi(val) * 0.01; else if ((val = cupsGetOption("fitplot", num_options, options)) != NULL && - !strcasecmp(val, "true")) + !_cups_strcasecmp(val, "true")) zoom = 1.0; else if ((val = cupsGetOption("fit-to-page", num_options, options)) != NULL && - !strcasecmp(val, "true")) + !_cups_strcasecmp(val, "true")) zoom = 1.0; if ((val = cupsGetOption("ppi", num_options, options)) != NULL) @@ -386,47 +391,47 @@ main(int argc, /* I - Number of command-line arguments */ if ((val = cupsGetOption("position", num_options, options)) != NULL) { - if (strcasecmp(val, "center") == 0) + if (_cups_strcasecmp(val, "center") == 0) { XPosition = 0; YPosition = 0; } - else if (strcasecmp(val, "top") == 0) + else if (_cups_strcasecmp(val, "top") == 0) { XPosition = 0; YPosition = 1; } - else if (strcasecmp(val, "left") == 0) + else if (_cups_strcasecmp(val, "left") == 0) { XPosition = -1; YPosition = 0; } - else if (strcasecmp(val, "right") == 0) + else if (_cups_strcasecmp(val, "right") == 0) { XPosition = 1; YPosition = 0; } - else if (strcasecmp(val, "top-left") == 0) + else if (_cups_strcasecmp(val, "top-left") == 0) { XPosition = -1; YPosition = 1; } - else if (strcasecmp(val, "top-right") == 0) + else if (_cups_strcasecmp(val, "top-right") == 0) { XPosition = 1; YPosition = 1; } - else if (strcasecmp(val, "bottom") == 0) + else if (_cups_strcasecmp(val, "bottom") == 0) { XPosition = 0; YPosition = -1; } - else if (strcasecmp(val, "bottom-left") == 0) + else if (_cups_strcasecmp(val, "bottom-left") == 0) { XPosition = -1; YPosition = -1; } - else if (strcasecmp(val, "bottom-right") == 0) + else if (_cups_strcasecmp(val, "bottom-right") == 0) { XPosition = 1; YPosition = -1; @@ -447,8 +452,8 @@ main(int argc, /* I - Number of command-line arguments */ else val = cupsGetOption("mirror", num_options, options); - if (val && (!strcasecmp(val, "true") || !strcasecmp(val, "on") || - !strcasecmp(val, "yes"))) + if (val && (!_cups_strcasecmp(val, "true") || !_cups_strcasecmp(val, "on") || + !_cups_strcasecmp(val, "yes"))) Flip = 1; /* @@ -457,7 +462,8 @@ main(int argc, /* I - Number of command-line arguments */ if (cupsRasterInterpretPPD(&header, ppd, num_options, options, raster_cb)) { - fputs(_("ERROR: Bad page setup!\n"), stderr); + _cupsLangPrintFilter(stderr, "ERROR", + _("The page setup information was not valid.")); fprintf(stderr, "DEBUG: %s\n", cupsRasterErrorString()); return (1); } @@ -483,6 +489,7 @@ main(int argc, /* I - Number of command-line arguments */ switch (header.cupsColorSpace) { case CUPS_CSPACE_W : + case CUPS_CSPACE_SW : if (header.cupsBitsPerColor >= 8) { primary = CUPS_IMAGE_WHITE; @@ -499,6 +506,8 @@ main(int argc, /* I - Number of command-line arguments */ case CUPS_CSPACE_RGB : case CUPS_CSPACE_RGBA : case CUPS_CSPACE_RGBW : + case CUPS_CSPACE_SRGB : + case CUPS_CSPACE_ADOBERGB : if (header.cupsBitsPerColor >= 8) { primary = CUPS_IMAGE_RGB; @@ -542,6 +551,42 @@ main(int argc, /* I - Number of command-line arguments */ primary = CUPS_IMAGE_CMY; secondary = CUPS_IMAGE_CMY; break; + + case CUPS_CSPACE_CIEXYZ : + case CUPS_CSPACE_CIELab : + case CUPS_CSPACE_ICC1 : + case CUPS_CSPACE_ICC2 : + case CUPS_CSPACE_ICC3 : + case CUPS_CSPACE_ICC4 : + case CUPS_CSPACE_ICC5 : + case CUPS_CSPACE_ICC6 : + case CUPS_CSPACE_ICC7 : + case CUPS_CSPACE_ICC8 : + case CUPS_CSPACE_ICC9 : + case CUPS_CSPACE_ICCA : + case CUPS_CSPACE_ICCB : + case CUPS_CSPACE_ICCC : + case CUPS_CSPACE_ICCD : + case CUPS_CSPACE_ICCE : + case CUPS_CSPACE_ICCF : + case CUPS_CSPACE_DEVICE1 : + case CUPS_CSPACE_DEVICE2 : + case CUPS_CSPACE_DEVICE3 : + case CUPS_CSPACE_DEVICE4 : + case CUPS_CSPACE_DEVICE5 : + case CUPS_CSPACE_DEVICE6 : + case CUPS_CSPACE_DEVICE7 : + case CUPS_CSPACE_DEVICE8 : + case CUPS_CSPACE_DEVICE9 : + case CUPS_CSPACE_DEVICEA : + case CUPS_CSPACE_DEVICEB : + case CUPS_CSPACE_DEVICEC : + case CUPS_CSPACE_DEVICED : + case CUPS_CSPACE_DEVICEE : + case CUPS_CSPACE_DEVICEF : + fprintf(stderr, "DEBUG: Colorspace %d not supported.\n", + header.cupsColorSpace); + exit(1); break; } @@ -588,7 +633,7 @@ main(int argc, /* I - Number of command-line arguments */ (strcmp(profile->media_type, media_type) == 0 || profile->media_type[0] == '-')) { - fputs("MATCH!\n", stderr); + fputs("MATCH\n", stderr); break; } else @@ -620,7 +665,7 @@ main(int argc, /* I - Number of command-line arguments */ * Open the input image to print... */ - fputs(_("INFO: Loading image file...\n"), stderr); + _cupsLangPrintFilter(stderr, "INFO", _("Loading print file.")); if (header.cupsColorSpace == CUPS_CSPACE_CIEXYZ || header.cupsColorSpace == CUPS_CSPACE_CIELab || @@ -634,7 +679,8 @@ main(int argc, /* I - Number of command-line arguments */ if (img == NULL) { - fputs(_("ERROR: Unable to open image file for printing!\n"), stderr); + _cupsLangPrintFilter(stderr, "ERROR", + _("The print file could not be opened.")); ppdClose(ppd); return (1); } @@ -660,7 +706,7 @@ main(int argc, /* I - Number of command-line arguments */ /* * Scale the image as neccesary to match the desired pixels-per-inch. */ - + if (Orientation & 1) { xprint = (PageTop - PageBottom) / 72.0; @@ -825,7 +871,7 @@ main(int argc, /* I - Number of command-line arguments */ */ if ((choice = ppdFindMarkedChoice(ppd, "PageSize")) != NULL && - strcasecmp(choice->choice, "Custom") == 0) + _cups_strcasecmp(choice->choice, "Custom") == 0) { float width, /* New width in points */ length; /* New length in points */ @@ -1139,7 +1185,7 @@ main(int argc, /* I - Number of command-line arguments */ for (xpage = 0; xpage < xpages; xpage ++) for (ypage = 0; ypage < ypages; ypage ++, page ++) { - fprintf(stderr, _("INFO: Formatting page %d...\n"), page); + _cupsLangPrintFilter(stderr, "INFO", _("Formatting page %d."), page); if (Orientation & 1) { @@ -1196,8 +1242,9 @@ main(int argc, /* I - Number of command-line arguments */ if (cupsRasterWritePixels(ras, row, header.cupsBytesPerLine) < header.cupsBytesPerLine) { - fputs(_("ERROR: Unable to write raster data to driver!\n"), - stderr); + _cupsLangPrintFilter(stderr, "ERROR", + _("Unable to send raster data to the " + "driver.")); cupsImageClose(img); exit(1); } @@ -1292,8 +1339,9 @@ main(int argc, /* I - Number of command-line arguments */ if (cupsRasterWritePixels(ras, row, header.cupsBytesPerLine) < header.cupsBytesPerLine) { - fputs(_("ERROR: Unable to write raster data to driver!\n"), - stderr); + _cupsLangPrintFilter(stderr, "ERROR", + _("Unable to send raster data to the " + "driver.")); cupsImageClose(img); exit(1); } @@ -1332,8 +1380,9 @@ main(int argc, /* I - Number of command-line arguments */ if (cupsRasterWritePixels(ras, row, header.cupsBytesPerLine) < header.cupsBytesPerLine) { - fputs(_("ERROR: Unable to write raster data to driver!\n"), - stderr); + _cupsLangPrintFilter(stderr, "ERROR", + _("Unable to send raster data to the " + "driver.")); cupsImageClose(img); exit(1); }