Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!news.mel.connect.com.au!munnari.OZ.AU!news.ecn.uoknor.edu!feed1.news.erols.com!howland.erols.net!math.ohio-state.edu!jussieu.fr!oleane!weld.news.pipex.net!pipex!warm.news.pipex.net!pipex!tank.news.pipex.net!pipex!news.utell.co.uk!usenet From: brian@shift.utell.net (Brian Somers) Newsgroups: comp.unix.bsd.freebsd.misc Subject: Re: Printing with FreeBSD 2.1.6 Date: 21 May 1997 10:29:57 GMT Organization: Awfulhak Ltd. Lines: 75 Message-ID: <5luir5$39p@ui-gate.utell.co.uk> References: <33821625.1F2210DB@cyberworld.demon.co.uk> Reply-To: brian@awfulhak.org, brian@utell.co.uk NNTP-Posting-Host: shift.utell.net Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Newsreader: knews 0.9.8 Xref: euryale.cc.adfa.oz.au comp.unix.bsd.freebsd.misc:41348 In article <33821625.1F2210DB@cyberworld.demon.co.uk>, Lee Johnston <ljohnston@cyberworld.demon.co.uk> writes: > I am using FreeBSD 2.1.6 with a non postscript printer (a Canon BJC-4100 > Bubble Jet simulating a Epson LQ). I have managed to get ghostscript to > printout a .ps file on the printer, but when I create a printer filter > that is included in the FreeBSD handbook, which is shown below, it > doesn't work! > > #!/bin/sh > # > # ifhp - Print Ghostscript-simulated PostScript on a Canon BJC-4100 > # Installed in /usr/local/libexec/hpif > # > # Treat LF as CR+LF: > # > printf "\033&k2G" || exit 2 > # > # Read first two characters of the file > # > read first_line > first_two_chars=`expr "$first_line" : '\(..\)'` > if [ "$first_two_chars" = "%!" ]; then > # > # It is PostScript; use Ghostscript to scan-convert and print it > # > /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=epsonc > -sOutputFile=- - \ > && exit 0 > else > # > # Plain text or HP/PCL, so just print it directly; print a form > # at the end to eject the last page. > # > echo $first_line && cat && printf "\f" && exit 2 > fi > exit 2 > > I suspect that it may be the line ' first_two_chars=`expr "$first_line" >: '\(..\)'` ' as when I try a simple filter shown below, to echo the > result of the ' first_two_chars=`expr "$first_line" : '\(..\)'` ' line > to the printer, if only prints out ' expr "$first_line" : '\(..\)' '. > > #!/bin/sh > read first_line > first_two_chars=`expr "$first_line" : '\(..\)'` > echo $first_two_chars && exit 0 > exit 2 > > Has anyone come across this problem, and how do I solve it, Thanks! This works ok for me: shift:/tmp $ cat xxx #!/bin/sh read first_line first_two_chars=`expr "$first_line" : '\(..\)'` echo $first_two_chars && exit 0 exit 2 shift:/tmp $ echo hello | ./xxx he shift:/tmp $ Are you sure your quotes are the correct ones ? I find it clearer to use the $(command) syntax rather than the `command` syntax. > ______ > Lee Johnston > ljohnston@cyberworld.demon.co.uk > http://www.cyberworld.demon.co.uk > -- Brian <brian@awfulhak.org> <brian@freebsd.org> <http://www.awfulhak.org> Don't _EVER_ lose your sense of humour !