From 110a562096bd30b2f64e351a7b72b81640327feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakobus=20Sch=C3=BCrz?= Date: Fri, 10 Jan 2020 00:57:12 +0100 Subject: [PATCH] don't know --- ricoh-sp100/pstoricohddst-gdi | 189 ++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 ricoh-sp100/pstoricohddst-gdi diff --git a/ricoh-sp100/pstoricohddst-gdi b/ricoh-sp100/pstoricohddst-gdi new file mode 100644 index 0000000..71d0f8d --- /dev/null +++ b/ricoh-sp100/pstoricohddst-gdi @@ -0,0 +1,189 @@ +#!/bin/bash + +# Debug mode: change to 'yes' to enable +DEBUG=${DEBUG-no} + +function log() { + [ "${DEBUG}" = "yes" ] && echo $* | logger -t "$0[$$]" +} + +function logpipe() { + [ "${DEBUG}" = "yes" ] && echo $* | logger -t "$0[$$]" +} + +function trapINT() { + log "trapINT()" + [ "x$trp" = "x" ] && trp="yes" || return + sleep 30 && { [ ! "${DEBUG}" = "yes" ] && rm -rf $uid; log "Cleanup complete"; } & + exit +} + +function stop() { + log "Stop stop page"; + echo "stop" > $uid/999999999-page.pbm +} + +function output_page() { + # Converting page to JBIG format (parameters are very special for this printer!) + pbmtojbg -p 72 -o 3 -m 0 -q < $page > $uid/raster.jbig + + # Taking image size + jsize=`wc -c < $uid/raster.jbig` + + # Taking image dimensions + x=($(identify -format "%w %h %[fx:mean] " $page)) + ## + # The %[fx:mean] gives the average colour in the image which for + # monochrome is the number of white pixels divided by the size + # + # So the formula gives the number of black pixels. The final + # /1 causes bc to round to the nearest integer because scale=0 + ## + dots=$(echo "(${x[0]}*${x[1]}*(1-${x[2]}))/1"|bc) + ## + # FIX: toner cartridge runs out way too fast with this dots + # calculation above and once it decides it's empty, you + # can't force it to print. So set dots to an artificially + # low number + dots=$(echo "$dots/10"|bc) + + # Flushing page header + cat <$uid/output.stream #> >(tee $uid/output.stream) + +[ -x "$(which inotifywait)" ] && { + log "Asynchronous variant" + + ( + stage="empty" + inotifywait -q -m -r -e close_write --format '%f' $uid | grep --line-buffered 'page.pbm$' | while read page; do + log "Page submitted" + [ "$stage" = "empty" ] && { + log "1st stage. Flushing PJL header" + output_header + stage="printing" + } + [ "$page" = "999999999-page.pbm" ] && { + log "Last stage. Flushing PJL footer" + output_footer + pid=`ps ax | grep $uid | grep -v grep | awk ' { print $1 } '` + [ ! "x$pid" = "x" ] && kill $pid + break + } + [ "$stage" = "printing" ] && { + page=$uid/$page + output_page + } + done + ) & + + # Converting from PostScript to PostScript-monochrome, then to PBM image format (per page) + #gs -sDEVICE=ps2write -sOutputFile=- -r$resolution -dQUIET -dBATCH -dNOPAUSE - | + gs -sDEVICE=pbmraw -sOutputFile=${uid}/%03d-page.pbm -r$resolution -dQUIET -dBATCH -dNOPAUSE - + + stop + wait + + trapINT +} || { + log "Synchronous variant" + + # Converting from PostScript to PostScript-monochrome, then to PBM image format (per page) + log "Converting document to pages" + gs -sDEVICE=ps2write -sOutputFile=- -r$resolution -dQUIET -dBATCH -dNOPAUSE - | gs -sDEVICE=pbmraw -sOutputFile=${uid}/%03d-page.pbm -r$resolution -dQUIET -dBATCH -dNOPAUSE - + log "Conversion complete" + + output_header + + for page in ${uid}/*-page.pbm; do + output_page + done + + # Flushing PJL footer + output_footer + +} + +# only remove the output dir if not debugging +[ ! "${DEBUG}" = "yes" ] && rm -rf $uid; + +exit 0