peter@aucs.AcadiaU.ca (Peter Steele) (02/21/91)
I've just set up a new printer on our Unix system (using the BSD printer package) and want to set it up so that jobs sent to this printer will select one bin for their banner page (with yellow paper in it) and another bin for the rest of the printing. Is this done using an output filter (of) or an input filter (if)? Does anyone have a printer filter template that I could modify for this purpose. I just need to insert the code to output the escape sequences to switch the bins but don't know what the structure of a filter program for this sort of purpose is. Thanks in advance. -- Peter Steele Acadia Univ. Canada B0P 1X0 peter@auad.AcadiaU.CA Software Analyst Wolfville, NS 902-542-2201x121 peter@Acadia.BITNET
haroldt@paralandra.yorku.ca (Harold Tomlinson) (02/21/91)
>> I've just set up a new printer on our Unix system (using the BSD >> printer package) and want to set it up so that jobs sent to this >> printer will select one bin for their banner page (with yellow >> paper in it) and another bin for the rest of the printing. Is this >> done using an output filter (of) or an input filter (if)? Does anyone yes. (No, really, the answer is yes.) If you wish, write your printer filter to take standard input, prepend a command to change bins, grab the header page (if it exists) and change bins again. Then grab the rest of the standard in and dump the entire thing to standard out. On you /etc/printcap the of and if entries will be the same shell script. Then lpr will send the print job to the stdin of the filter and take the stdout and print it. The hard part is determining if there is a header page and pulling that off. >> have a printer filter template that I could modify for this purpose. No. >> I just need to insert the code to output the escape sequences to >> switch the bins but don't know what the structure of a filter program >> for this sort of purpose is. Thanks in advance. As an example, here is a postscript filter that I started to play with... ------------------------------cut here----------------------------------- #!/bin/sh # output header page in postscript pssetup="%! gsave 35 9.3 80 mul translate /basic 8 def /normal /Courier findfont basic scalefont def /down { 0 basic neg rmoveto } def /p { normal setfont show } def /n { currentpoint exch pop 0 exch moveto down } def 0 0 moveto" while read line; do case $line in *%!*) break;; *) pssetup="$pssetup ($line) p n";; esac; done pssetup="$pssetup showpage grestore" echo "$pssetup" | /usr/local/bin/tcp_f -w -e harpy 4099 /usr/local/bin/tcp_f -w -e harpy 4099 ------------------------------------------------------------------------- It has problems and has been cut off due to lack of time. Basically, it is supposed to look for the "%!" that signifies the start of the postscript and send that (at one point it looked for the last line of the header page ie. `grep "*Date:*"`). Mine then pumps the output through another program tcp_f. For what you want, change the last two lines to ------------------------------------------------- echo "$pssetup" while read line echo "$line" done ------------------------------------------------- >> Peter Steele Acadia Univ. Canada B0P 1X0 peter@auad.AcadiaU.CA >> Software Analyst Wolfville, NS 902-542-2201x121 peter@Acadia.BITNET Oh, what the heck... try this: ------------------------------------------------------------------------ ------------------------------------------------------------------------ ---- create the following file, call it /usr/local/lib/lp_trayswap ----- ------------------------------------------------------------------------ #!/bin/sh # output header page on paper from other bin ###NOTE:: define changetobinone and changetobintwo, these numbers are bogus changetobintwo="270312" changetobinone="270311" pssetup="$changetobintwo " while read line; do case $line in *Date:*) break;; *) pssetup="$pssetup $line";; esac; done pssetup="$pssetup $line $changetobinone" echo "$pssetup" while read line; do echo "$line "; done ------------------------------------------------------------------------ ------------------------------------------------------------------------ ------------------------------------------------------------------------ ----- add the following entry to your /etc/printcap -------------------- ccslaser|laser:\ :lp=/dev/lp:\ :sd=/usr/spool/lp_lp:\ :of=/usr/local/lib/lp_trayswap:\ :if=/usr/local/lib/lp_trayswap:\ :lf=/usr/spool/lp_lp/log:\ :af=/usr/spool/lp_lp/acct:\ :pl#66:\ :pw#80:\ :mc#20:\ :mx#0: ------------------------------------------------------------------------ ------------------------------------------------------------------------ ------------------------------------------------------------------------ - be sure to `touch /usr/spool/lp_lp/log; touch /usr/spool/lp_lp/acct` - ------------------------------------------------------------------------ ------------------------------------------------------------------------ ------------------------------------------------------------------------ Disclaimer::: If you really believe the above might work, I feel sorry for you. If you try it, :) ... well, I won't be responsible for the actions of any adult (or simulated adult). ====================================================================== === Harold Tomlinson === == Computing and Communications Services == = YORK UNIVERSITY = = haroldt@paralandra.yorku.ca = = 416- 736-5257-33802 = ====================================================================== -- ====================================================================== === Harold Tomlinson === == Computing and Communications Services == = YORK UNIVERSITY = = haroldt@paralandra.yorku.ca = = 416- 736-5257-33802 = ======================================================================