diff options
author | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2008-04-09 22:42:49 +0000 |
---|---|---|
committer | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2008-04-09 22:42:49 +0000 |
commit | 839a51c83c61febe8d4c9ba56f6a05fce3d03710 (patch) | |
tree | f4a78140580870e06a5d95257d979990e12155ab /driver | |
parent | 50fe720154d2af59cdeeaecf05cc868530e16248 (diff) | |
download | cups-839a51c83c61febe8d4c9ba56f6a05fce3d03710.tar.gz |
Merge changes from CUPS 1.4svn-r7394.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@702 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'driver')
-rw-r--r-- | driver/Makefile | 1 | ||||
-rw-r--r-- | driver/pcl-common.h | 2 | ||||
-rw-r--r-- | driver/rastertoescpx.c | 86 | ||||
-rw-r--r-- | driver/rastertopclx.c | 85 |
4 files changed, 150 insertions, 24 deletions
diff --git a/driver/Makefile b/driver/Makefile index 30715f805..ea4240acb 100644 --- a/driver/Makefile +++ b/driver/Makefile @@ -151,7 +151,6 @@ install-libs: $(INSTALLSTATIC) $(INSTALL32) $(INSTALL64) $(LN) $(LIBCUPSDRIVER) $(LIBDIR)/`basename $(LIBCUPSDRIVER) .1`; \ fi if test $(LIBCUPSDRIVER) = "libcupsdriver.1.dylib"; then \ - $(STRIP) -x $(LIBDIR)/$(LIBCUPSDRIVER); \ $(RM) $(LIBDIR)/libcupsdriver.dylib; \ $(LN) $(LIBCUPSDRIVER) $(LIBDIR)/libcupsdriver.dylib; \ fi diff --git a/driver/pcl-common.h b/driver/pcl-common.h index 78cf70168..17819ab01 100644 --- a/driver/pcl-common.h +++ b/driver/pcl-common.h @@ -17,7 +17,7 @@ * Include necessary headers... */ -#include "string.h" +#include <cups/string.h> #include "data/pcl.h" diff --git a/driver/rastertoescpx.c b/driver/rastertoescpx.c index f9cf22a61..362086e45 100644 --- a/driver/rastertoescpx.c +++ b/driver/rastertoescpx.c @@ -3,7 +3,7 @@ * * Advanced EPSON ESC/P raster driver for CUPS. * - * Copyright 2007 by Apple Inc. + * Copyright 2007-2008 by Apple Inc. * Copyright 1993-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -18,6 +18,7 @@ * StartPage() - Start a page of graphics. * EndPage() - Finish a page of graphics. * Shutdown() - Shutdown a printer. + * CancelJob() - Cancel the current job... * CompressData() - Compress a line of graphics. * OutputBand() - Output a band of graphics. * ProcessLine() - Read graphics from the page stream and output @@ -32,6 +33,7 @@ #include "driver.h" #include <cups/string.h> #include "data/escp.h" +#include <signal.h> /* @@ -82,6 +84,7 @@ int PrinterPlanes, /* # of color planes */ cups_lut_t *DitherLuts[7]; /* Lookup tables for dithering */ cups_dither_t *DitherStates[7]; /* Dither state tables */ int OutputFeed; /* Number of lines to skip */ +int Canceled; /* Is the job canceled? */ /* @@ -89,18 +92,19 @@ int OutputFeed; /* Number of lines to skip */ */ void Setup(ppd_file_t *); -void StartPage(ppd_file_t *, cups_page_header_t *); -void EndPage(ppd_file_t *, cups_page_header_t *); +void StartPage(ppd_file_t *, cups_page_header2_t *); +void EndPage(ppd_file_t *, cups_page_header2_t *); void Shutdown(ppd_file_t *); void AddBand(cups_weave_t *band); +void CancelJob(int sig); void CompressData(ppd_file_t *, const unsigned char *, const int, int, int, const int, const int, const int, const int); -void OutputBand(ppd_file_t *, cups_page_header_t *, +void OutputBand(ppd_file_t *, cups_page_header2_t *, cups_weave_t *band); void ProcessLine(ppd_file_t *, cups_raster_t *, - cups_page_header_t *, const int y); + cups_page_header2_t *, const int y); /* @@ -126,7 +130,7 @@ Setup(ppd_file_t *ppd) /* I - PPD file */ void StartPage(ppd_file_t *ppd, /* I - PPD file */ - cups_page_header_t *header) /* I - Page header */ + cups_page_header2_t *header) /* I - Page header */ { int i, y; /* Looping vars */ int subrow, /* Current subrow */ @@ -1043,7 +1047,7 @@ StartPage(ppd_file_t *ppd, /* I - PPD file */ void EndPage(ppd_file_t *ppd, /* I - PPD file */ - cups_page_header_t *header) /* I - Page header */ + cups_page_header2_t *header) /* I - Page header */ { int i; /* Looping var */ cups_weave_t *band, /* Current band */ @@ -1265,6 +1269,19 @@ AddBand(cups_weave_t *band) /* I - Band to add */ /* + * 'CancelJob()' - Cancel the current job... + */ + +void +CancelJob(int sig) /* I - Signal */ +{ + (void)sig; + + Canceled = 1; +} + + +/* * 'CompressData()' - Compress a line of graphics. */ @@ -1467,7 +1484,7 @@ CompressData(ppd_file_t *ppd, /* I - PPD file information */ void OutputBand(ppd_file_t *ppd, /* I - PPD file */ - cups_page_header_t *header, /* I - Page header */ + cups_page_header2_t *header, /* I - Page header */ cups_weave_t *band) /* I - Current band */ { int xstep, /* Spacing between columns */ @@ -1529,7 +1546,7 @@ OutputBand(ppd_file_t *ppd, /* I - PPD file */ void ProcessLine(ppd_file_t *ppd, /* I - PPD file */ cups_raster_t *ras, /* I - Raster stream */ - cups_page_header_t *header, /* I - Page header */ + cups_page_header2_t *header, /* I - Page header */ const int y) /* I - Current scanline */ { int plane, /* Current color plane */ @@ -1725,12 +1742,15 @@ main(int argc, /* I - Number of command-line arguments */ { int fd; /* File descriptor */ cups_raster_t *ras; /* Raster stream for printing */ - cups_page_header_t header; /* Page header from file */ + cups_page_header2_t header; /* Page header from file */ int page; /* Current page */ int y; /* Current line */ ppd_file_t *ppd; /* PPD file */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ +#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) + struct sigaction action; /* Actions for POSIX signals */ +#endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* @@ -1784,6 +1804,25 @@ main(int argc, /* I - Number of command-line arguments */ ras = cupsRasterOpen(fd, CUPS_RASTER_READ); /* + * Register a signal handler to eject the current page if the + * job is cancelled. + */ + + Canceled = 0; + +#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ + sigset(SIGTERM, CancelJob); +#elif defined(HAVE_SIGACTION) + memset(&action, 0, sizeof(action)); + + sigemptyset(&action.sa_mask); + action.sa_handler = CancelJob; + sigaction(SIGTERM, &action, NULL); +#else + signal(SIGTERM, CancelJob); +#endif /* HAVE_SIGSET */ + + /* * Initialize the print device... */ @@ -1795,8 +1834,15 @@ main(int argc, /* I - Number of command-line arguments */ page = 0; - while (cupsRasterReadHeader(ras, &header)) + while (cupsRasterReadHeader2(ras, &header)) { + /* + * Write a status message with the page number and number of copies. + */ + + if (Canceled) + break; + page ++; fprintf(stderr, "PAGE: %d 1\n", page); @@ -1806,16 +1852,34 @@ main(int argc, /* I - Number of command-line arguments */ for (y = 0; y < header.cupsHeight; y ++) { + /* + * Let the user know how far we have progressed... + */ + + if (Canceled) + break; + if ((y & 127) == 0) fprintf(stderr, "INFO: Printing page %d, %d%% complete...\n", page, 100 * y / header.cupsHeight); + /* + * Read and write a line of graphics or whitespace... + */ + ProcessLine(ppd, ras, &header, y); } + /* + * Eject the page... + */ + fprintf(stderr, "INFO: Finished page %d...\n", page); EndPage(ppd, &header); + + if (Canceled) + break; } Shutdown(ppd); diff --git a/driver/rastertopclx.c b/driver/rastertopclx.c index 9c5097448..d021e2342 100644 --- a/driver/rastertopclx.c +++ b/driver/rastertopclx.c @@ -15,10 +15,10 @@ * * Contents: * - * Setup() - Prepare a printer for graphics output. * StartPage() - Start a page of graphics. * EndPage() - Finish a page of graphics. * Shutdown() - Shutdown a printer. + * CancelJob() - Cancel the current job... * CompressData() - Compress a line of graphics. * OutputLine() - Output the specified number of lines of graphics. * ReadLine() - Read graphics from the page stream. @@ -31,6 +31,7 @@ #include "driver.h" #include "pcl-common.h" +#include <signal.h> /* @@ -80,23 +81,25 @@ const int ColorOrders[7][7] = /* Order of color planes */ { 5, 0, 1, 2, 3, 4, 0 }, /* KCMYcm */ { 5, 0, 1, 2, 3, 4, 6 } /* KCMYcmk */ }; +int Canceled; /* Is the job canceled? */ /* * Prototypes... */ -void StartPage(ppd_file_t *ppd, cups_page_header_t *header, int job_id, +void StartPage(ppd_file_t *ppd, cups_page_header2_t *header, int job_id, const char *user, const char *title, int num_options, cups_option_t *options); -void EndPage(ppd_file_t *ppd, cups_page_header_t *header); +void EndPage(ppd_file_t *ppd, cups_page_header2_t *header); void Shutdown(ppd_file_t *ppd, int job_id, const char *user, const char *title, int num_options, cups_option_t *options); +void CancelJob(int sig); void CompressData(unsigned char *line, int length, int plane, int pend, int type); -void OutputLine(ppd_file_t *ppd, cups_page_header_t *header); -int ReadLine(cups_raster_t *ras, cups_page_header_t *header); +void OutputLine(ppd_file_t *ppd, cups_page_header2_t *header); +int ReadLine(cups_raster_t *ras, cups_page_header2_t *header); /* @@ -105,7 +108,7 @@ int ReadLine(cups_raster_t *ras, cups_page_header_t *header); void StartPage(ppd_file_t *ppd, /* I - PPD file */ - cups_page_header_t *header, /* I - Page header */ + cups_page_header2_t *header, /* I - Page header */ int job_id, /* I - Job ID */ const char *user, /* I - User printing job */ const char *title, /* I - Title of job */ @@ -807,7 +810,7 @@ StartPage(ppd_file_t *ppd, /* I - PPD file */ void EndPage(ppd_file_t *ppd, /* I - PPD file */ - cups_page_header_t *header) /* I - Page header */ + cups_page_header2_t *header) /* I - Page header */ { int plane; /* Current plane */ @@ -917,6 +920,19 @@ Shutdown(ppd_file_t *ppd, /* I - PPD file */ /* + * 'CancelJob()' - Cancel the current job... + */ + +void +CancelJob(int sig) /* I - Signal */ +{ + (void)sig; + + Canceled = 1; +} + + +/* * 'CompressData()' - Compress a line of graphics. */ @@ -1518,7 +1534,7 @@ CompressData(unsigned char *line, /* I - Data to compress */ void OutputLine(ppd_file_t *ppd, /* I - PPD file */ - cups_page_header_t *header) /* I - Page header */ + cups_page_header2_t *header) /* I - Page header */ { int i, j; /* Looping vars */ int plane; /* Current plane */ @@ -1657,7 +1673,7 @@ OutputLine(ppd_file_t *ppd, /* I - PPD file */ int /* O - Number of lines (0 if blank) */ ReadLine(cups_raster_t *ras, /* I - Raster stream */ - cups_page_header_t *header) /* I - Page header */ + cups_page_header2_t *header) /* I - Page header */ { int plane, /* Current color plane */ width; /* Width of line */ @@ -1755,12 +1771,15 @@ main(int argc, /* I - Number of command-line arguments */ { int fd; /* File descriptor */ cups_raster_t *ras; /* Raster stream for printing */ - cups_page_header_t header; /* Page header from file */ + cups_page_header2_t header; /* Page header from file */ int y; /* Current line */ ppd_file_t *ppd; /* PPD file */ int job_id; /* Job ID */ int num_options; /* Number of options */ cups_option_t *options; /* Options */ +#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) + struct sigaction action; /* Actions for POSIX signals */ +#endif /* HAVE_SIGACTION && !HAVE_SIGSET */ /* @@ -1814,6 +1833,25 @@ main(int argc, /* I - Number of command-line arguments */ ras = cupsRasterOpen(fd, CUPS_RASTER_READ); /* + * Register a signal handler to eject the current page if the + * job is cancelled. + */ + + Canceled = 0; + +#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */ + sigset(SIGTERM, CancelJob); +#elif defined(HAVE_SIGACTION) + memset(&action, 0, sizeof(action)); + + sigemptyset(&action.sa_mask); + action.sa_handler = CancelJob; + sigaction(SIGTERM, &action, NULL); +#else + signal(SIGTERM, CancelJob); +#endif /* HAVE_SIGSET */ + + /* * Process pages as needed... */ @@ -1821,8 +1859,15 @@ main(int argc, /* I - Number of command-line arguments */ Page = 0; - while (cupsRasterReadHeader(ras, &header)) + while (cupsRasterReadHeader2(ras, &header)) { + /* + * Write a status message with the page number and number of copies. + */ + + if (Canceled) + break; + Page ++; fprintf(stderr, "PAGE: %d %d\n", Page, header.NumCopies); @@ -1833,19 +1878,37 @@ main(int argc, /* I - Number of command-line arguments */ for (y = 0; y < (int)header.cupsHeight; y ++) { + /* + * Let the user know how far we have progressed... + */ + + if (Canceled) + break; + if ((y & 127) == 0) fprintf(stderr, "INFO: Printing page %d, %d%% complete...\n", Page, 100 * y / header.cupsHeight); + /* + * Read and write a line of graphics or whitespace... + */ + if (ReadLine(ras, &header)) OutputLine(ppd, &header); else OutputFeed ++; } + /* + * Eject the page... + */ + fprintf(stderr, "INFO: Finished page %d...\n", Page); EndPage(ppd, &header); + + if (Canceled) + break; } Shutdown(ppd, job_id, argv[2], argv[3], num_options, options); |