From 7f82890157a60bafd2242e2d06f1716c885ef462 Mon Sep 17 00:00:00 2001 From: mounaiban <29518031+mounaiban@users.noreply.github.com> Date: Tue, 23 Aug 2022 22:52:36 +1000 Subject: [PATCH 1/2] Don't use fprintf() in do_cancel() fprintf() is not re-entrant --- src/rastertocapt.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/rastertocapt.c b/src/rastertocapt.c index 894d523..0711734 100644 --- a/src/rastertocapt.c +++ b/src/rastertocapt.c @@ -208,7 +208,6 @@ static void send_page_data(struct printer_state_s *state, const struct cached_pa static void do_cancel(int s) { (void) s; - fprintf(stderr, "DEBUG: CAPT: begin job cancellation cleanup\n"); if (ops) ops->cancel_cleanup(state); @@ -228,7 +227,6 @@ static void do_cancel(int s) if (state) free_state(); - fprintf(stderr, "DEBUG: CAPT: job cancellation cleanup complete\n"); exit(1); } From 104f414d072bcd9c6e0fa7bcc422088a70d19aea Mon Sep 17 00:00:00 2001 From: mounaiban <29518031+mounaiban@users.noreply.github.com> Date: Wed, 24 Aug 2022 05:10:15 +1000 Subject: [PATCH 2/2] Add manual duplex mode Printer will wait on user to feed the last printed sheet back into the input tray to print on the other side; press the button to continue --- src/canon-lbp.drv | 6 +++++- src/paper.c | 1 + src/paper.h | 1 + src/rastertocapt.c | 4 ++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/canon-lbp.drv b/src/canon-lbp.drv index 40d1641..c14e116 100644 --- a/src/canon-lbp.drv +++ b/src/canon-lbp.drv @@ -16,7 +16,7 @@ Copyright "(C)2020 Moses Chong" ColorModel "Gray/Grayscale" k chunky 2 Filter application/vnd.cups-raster 1 rastertocapt *Manufacturer "Canon Inc" -Version 0.1.3 +Version 0.1.4 { Font * @@ -25,6 +25,10 @@ Version 0.1.3 *Choice False/Disabled "<>setpagedevice" Choice True/Enabled "<>setpagedevice" + Option "captManualDuplex/Manual Duplex" Boolean AnySetup 10 + *Choice False/Disabled "<>setpagedevice" + Choice True/Enabled "<>setpagedevice" + { *Resolution k 1 70 592 0 "600dpi/600 DPI" diff --git a/src/paper.c b/src/paper.c index 17dcd9d..dc6b5e6 100644 --- a/src/paper.c +++ b/src/paper.c @@ -29,6 +29,7 @@ void page_set_dims(struct page_dims_s *dims, const struct cups_page_header2_s *h dims->paper_height = header->cupsHeight; //header->PageSize[1] * header->HWResolution[1] / 72; dims->toner_save = header->cupsInteger[0]; dims->ink_k = header->cupsInteger[1]; + dims->manual_duplex = header->cupsInteger[2]; dims->line_size = header->PageSize[0]; dims->num_lines = header->cupsHeight; dims->band_size = header->cupsRowCount; diff --git a/src/paper.h b/src/paper.h index 11f558e..2aca392 100644 --- a/src/paper.h +++ b/src/paper.h @@ -31,6 +31,7 @@ struct page_dims_s { unsigned paper_width; unsigned paper_height; unsigned toner_save; + unsigned manual_duplex; unsigned ink_k; unsigned margin_height; unsigned margin_width; diff --git a/src/rastertocapt.c b/src/rastertocapt.c index 0711734..09f890d 100644 --- a/src/rastertocapt.c +++ b/src/rastertocapt.c @@ -278,6 +278,10 @@ static void do_print(int fd) fprintf(stderr, "DEBUG: CAPT: rastertocapt: start page %u\n", state->ipage); if (ops->page_prologue) { + if (cached_page->dims.manual_duplex && state->ipage > 1) { + fprintf(stderr, "DEBUG: CAPT: rastertocapt: manual duplex: press button to continue\n"); + ops->wait_user(state); + } bool ok = ops->page_prologue(state, &cached_page->dims); if (! ok) { fprintf(stderr, "DEBUG: CAPT: rastertocapt: can't start page\n");