On Fri, 25 Feb 2000, Adam D. Marks wrote:

> Has anyone had any luck printing to a remote printer using jetdirect. I
> have a HP 2100 on a JetDirect EX Plus 3. The closest I got is with using
> rlpr but the format that is printed is messed up.
At our site we use the following entries in /etc/printcap:

printer-name|printer-alias1|printer-alias2|full name:\
        :if=/usr/local/libexec/nyif-for-ps-og-pcl:\
        :lf=/var/log/lpd-errs:\
        :mx#0:\
        :rm=printer-name:\
        :sd=/var/spool/lpd/printer-name:\
        :sf:
        :sh:

/etc/hosts contains the name-to-IP translation of the printer names in
the rm capability.

I have created an input filter, somewhat inspired by printtool on Red
Hat, that we use at our site.

This input filter first check to see if the file to be printed is
compressed in some way by using file(1), if so then the input filter
attempts to decompress the file. If the file was indeed decompressed,
the input filter runs file(1) again to see what format the data might
be in now.

Next the input filter tries to determine how to convert the file into
PCL or PS. This is accomplished by a case-esac construction.

So far my input filter can convert bmp, gif, jpeg, tiff, sun raster,
pnm (i.e. pgm, pbm, ppm), pdf, dvi, fig, and troff to PS. Data which
is already in PS or PCL format is passed unprocessed to the printers
since, our site have printers that understand both PCL and PS.

Data that appears to be plain text in sent to printer, after the
printer has received an initialization string. Last the printer
receives a reset command.

I have, however, created a similar inputfilter which converts any PS
output (including PS output generated by the input filter) to PCL
for printers that don't understand PS.

Unfortunately all the comments and debug messages in my input filters
are in Norwegian, but I'll translate to English anything that isn't
clear.

Attached you'll find nyif-for-ps-og-pcl which is the input filter for
both PS and PCL capable printers, and nyif-for-pcl which is the
inputfilter for PCL only printers.

Also, it might be wise to turn off the banner page generated by
JetDirect (that's right, JetDirect, not lpd) through the telnet
configuration!

----------------------------------------------------------------------
Trond Endrestøl                          |             [EMAIL PROTECTED]
Merkantilvegen 59HB7,                    |    [EMAIL PROTECTED]
N-2815 GJØVIK, NORWAY                    |+47 61139424 || +47 63874242
Patron of The Art of Computer Programming|     FreeBSD 3.4 & Pine 4.21
#!/bin/sh
#
# /usr/local/libexec/nyif-for-ps-og-pcl
#
# Nytt inputfilter for lpd på FreeBSD, spesielt
# for skrivere som både skjønner PostScript og PCL.
#
# Denne gangen med støtte for flere filformater som detekteres
# ved hjelp av file-programmet. Komprimerte filer støttes også.
#
# Inspirert til en viss grad av Red Hat-systemet.
#
# Du trenger følgende ports/packages for at dette skal gå bra:
#
# netpbm-9.4.3.1
# jpeg-6b
# tiff-3.5.1
# ghostscript-5.50
# transfig-3.2.1
# dvi2xx-0.51.a9
# grog fra groff 1.11
#
# trond, 2000-02-23
#

# Eventuelt slå på debugging av hver linje og vise miljøvariablene
# set -x
# set >/dev/stderr

# Med denne kan vi slå av og på debugging til loggfila.
# DEBUG_NYIF=jada

# Sette path for forskjellige programmer
export 
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/libexec:/usr/X11R6/bin:/usr/X11R6/libexec:/usr/bin:/usr/sbin:/usr/libexec:/bin:/sbin


# Finne ut hva vi heter
PROGRAM=`basename $0`

# Definere navn for midlertidig katalog og midlertidige filer
KATALOG="/tmp/$$.nyif"
DATAFIL="$KATALOG/data"
DATAFIL2="$KATALOG/data2"

# Funksjon for å rydde opp
RyddOpp ()
{
  rm -R $KATALOG;
}

# Sette RyddOpp til å rydde opp ved forskjellige anledninger
trap RyddOpp EXIT HUP INT QUIT TERM

# Sette umask til -rwx------ for kataloger og -rw------- for filer
umask 077

# Sette max lengde på corefiler til 0
ulimit -c 0

# Opprette midlertidig katalog
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å opprette katalogen 
$KATALOG";
fi
mkdir -p $KATALOG || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
opprette midlertidig katalog $KATALOG"; exit 2 )

# Hente inn data til midlertidig fil
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å hente inn data til 
$DATAFIL";
fi
cat > $DATAFIL || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke ta inn 
data med cat"; exit 2 )

# Finne hva slags data vi har fått
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å finne ut om data er 
komprimert";
fi
MAGIC=`file $DATAFIL | tr 'A-Z' 'a-z'` || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke avgjøre om data er komprimert eller ei"; exit 2 )
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: MAGIC = $MAGIC";
fi

# Finne ut om data er komprimert
case "$MAGIC" in
  *packed*|*gzip*|*compress*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis 
komprimert og prøver å dekomprimere data";
    fi;
    gzip -dc $DATAFIL > $DATAFIL2 || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke dekomprimere data"; exit 2 );
    DATAFIL=$DATAFIL2;
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å finne ut hva slags 
data vi nå kan ha fått";
    fi;
    MAGIC=`file $DATAFIL | tr 'A-Z' 'a-z'` || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke avgjøre hva data egentlig er"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: MAGIC = $MAGIC";
    fi;
    ;;
  *)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis ikke 
komprimert";
    fi;
    ;;
esac

# Finne ut hva slags data vi nå kan ha fått
case "$MAGIC" in
  *empty*)
    logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: data er tomt";
    exit 2;
    ;;
  *"pc bitmap data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
pc bitmap data";
    fi;
    bmptoppm $DATAFIL | pnmtops 2>/dev/null || ( logger -s -p lpr.err -t 
"$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til skriveren med bmptopnm og pnmtops"; 
exit 2 );
    ;;
  *"gif image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
gif image data";
    fi;
    giftopnm $DATAFIL | pnmtops 2>/dev/null || ( logger -s -p lpr.err -t 
"$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til skriveren med giftopnm og pnmtops"; 
exit 2 );
    ;;
  *"jpeg image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
jpeg image data";
    fi;
    djpeg -pnm $DATAFIL | pnmtops 2>/dev/null || ( logger -s -p lpr.err -t 
"$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til skriveren med djpeg og pnmtops"; 
exit 2 );
    ;;
  *"tiff image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
tiff image data";
    fi;
    tifftopnm $DATAFIL | pnmtops 2>/dev/null || ( logger -s -p lpr.err -t 
"$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til skriveren med tifftopnm og pnmtops"; 
exit 2 );
    ;;
  *"sun raster image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
sun raster image data";
    fi;
    rasttopnm $DATAFIL | pnmtops 2>/dev/null || ( logger -s -p lpr.err -t 
"$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til skriveren med rasttopnm og pnmtops"; 
exit 2 );
    ;;
  *pgm*|*pbm*|*ppm*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
pgm, pbm eller ppm";
    fi;
    pnmtops $DATAFIL 2>/dev/null || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke sende data til skriveren med pnmtops"; exit 2 );
    ;;
  *postscript*|*pcl*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
postscript eller pcl";
    fi;
    cat $DATAFIL || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende 
data til skriveren med cat"; exit 2 );
    ;;
  *"pdf document"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
pdf document";
    fi;
    gs -dNOPAUSE -dSAFER -sDEVICE=pswrite -sPAPERSIZE=a4 -sOutputFile=- -q $DATAFIL || 
( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til skriveren 
med gs"; exit 2 );
    ;;
  *"tex dvi file"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
tex dvi file";
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å linke $DATAFIL.dvi 
til $DATAFIL";
    fi;
    ln $DATAFIL $DATAFIL.dvi || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: 
kan ikke lage $DATAFIL.dvi som link til $DATAFIL"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å kjøre dvilj -D -e- 
-q -w $DATAFIL.dvi";
    fi;
    dvilj -D -e- -q -w $DATAFIL.dvi; # Vi kan ikke stole på status til dvilj...
    ;;
  *"fig image text"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
fig image text";
    fi;
    cat $DATAFIL | fig2dev -L ps | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med fig2dev og gs"; exit 2 );
    ;;
  *"troff or preprocessor"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
troff or preprocessor";
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å få grog til å finne 
hvilken kommando som skal kjøres";
    fi;
    KOMMANDO=`grog -Tps $DATAFIL` || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke finne ut hvordan troff-data skal formateres med grog"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: grog bestemte seg for å 
anbefale $KOMMANDO";
    fi;
    $KOMMANDO || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende 
data til skriveren med $KOMMANDO"; exit 2 );
    ;;
  *)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis noe helt 
annet, kanskje tekst";
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å sende initstreng 
til skriveren";
    fi;
    printf "\033E\033(0N\033&k2G\033&l1S" || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke sende initstreng til skriveren med printf"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å sende data til 
skriveren";
    fi;
    cat $DATAFIL || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende 
data til skriveren med cat"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å sende reset til 
skriveren";
    fi;
    printf "\033E" || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende reset til skriveren med printf"; exit 2 );
    ;;
esac

if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: vellykket avslutning";
fi
exit 0

# /usr/local/libexec/nyif-for-ps-og-pcl
#!/bin/sh
#
# /usr/local/libexec/nyif-for-pcl
#
# Nytt inputfilter for lpd på FreeBSD, spesielt
# for skrivere som ikke skjønner PostScript.
#
# Denne gangen med støtte for flere filformater som detekteres
# ved hjelp av file-programmet. Komprimerte filer støttes også.
#
# Inspirert til en viss grad av Red Hat-systemet.
#
# Du trenger følgende ports/packages for at dette skal gå bra:
#
# netpbm-9.4.3.1
# jpeg-6b
# tiff-3.5.1
# ghostscript-5.50
# transfig-3.2.1
# dvi2xx-0.51.a9
# grog fra groff 1.11
#
# trond, 2000-02-23
#

# Eventuelt slå på debugging av hver linje og vise miljøvariablene
# set -x
# set >/dev/stderr

# Med denne kan vi slå av og på debugging til loggfila.
# DEBUG_NYIF=jada

# Sette path for forskjellige programmer
export 
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/libexec:/usr/X11R6/bin:/usr/X11R6/libexec:/usr/bin:/usr/sbin:/usr/libexec:/bin:/sbin


# Finne ut hva vi heter
PROGRAM=`basename $0`

# Definere navn for midlertidig katalog og midlertidige filer
KATALOG="/tmp/$$.nyif"
DATAFIL="$KATALOG/data"
DATAFIL2="$KATALOG/data2"

# Funksjon for å rydde opp
RyddOpp ()
{
  rm -R $KATALOG;
}

# Sette RyddOpp til å rydde opp ved forskjellige anledninger
trap RyddOpp EXIT HUP INT QUIT TERM

# Sette umask til -rwx------ for kataloger og -rw------- for filer
umask 077

# Sette max lengde på corefiler til 0
ulimit -c 0

# Opprette midlertidig katalog
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å opprette katalogen 
$KATALOG";
fi
mkdir -p $KATALOG || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
opprette midlertidig katalog $KATALOG"; exit 2 )

# Hente inn data til midlertidig fil
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å hente inn data til 
$DATAFIL";
fi
cat > $DATAFIL || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke ta inn 
data med cat"; exit 2 )

# Finne hva slags data vi har fått
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å finne ut om data er 
komprimert";
fi
MAGIC=`file $DATAFIL | tr 'A-Z' 'a-z'` || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke avgjøre om data er komprimert eller ei"; exit 2 )
if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: MAGIC = $MAGIC";
fi

# Finne ut om data er komprimert
case "$MAGIC" in
  *packed*|*gzip*|*compress*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis 
komprimert og prøver å dekomprimere data";
    fi;
    gzip -dc $DATAFIL > $DATAFIL2 || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke dekomprimere data"; exit 2 );
    DATAFIL=$DATAFIL2;
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å finne ut hva slags 
data vi nå kan ha fått";
    fi;
    MAGIC=`file $DATAFIL | tr 'A-Z' 'a-z'` || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke avgjøre hva data egentlig er"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: MAGIC = $MAGIC";
    fi;
    ;;
  *)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis ikke 
komprimert";
    fi;
    ;;
esac

# Finne ut hva slags data vi nå kan ha fått
case "$MAGIC" in
  *empty*)
    logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: data er tomt";
    exit 2;
    ;;
  *"pc bitmap data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
pc bitmap data";
    fi;
    bmptoppm $DATAFIL | pnmtops 2>/dev/null | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med bmptopnm og pnmtops"; exit 2 );
    ;;
  *"gif image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
gif image data";
    fi;
    giftopnm $DATAFIL | pnmtops 2>/dev/null | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med giftopnm og pnmtops"; exit 2 );
    ;;
  *"jpeg image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
jpeg image data";
    fi;
    djpeg -pnm $DATAFIL | pnmtops 2>/dev/null | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med djpeg og pnmtops"; exit 2 );
    ;;
  *"tiff image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
tiff image data";
    fi;
    tifftopnm $DATAFIL | pnmtops 2>/dev/null | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med tifftopnm og pnmtops"; exit 2 );
    ;;
  *"sun raster image data"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
sun raster image data";
    fi;
    rasttopnm $DATAFIL | pnmtops 2>/dev/null | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med rasttopnm og pnmtops"; exit 2 );
    ;;
  *pgm*|*pbm*|*ppm*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
pgm, pbm eller ppm";
    fi;
    pnmtops $DATAFIL 2>/dev/null | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med pnmtops"; exit 2 );
    ;;
  *postscript*|*"pdf document"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
postscript eller pdf document";
    fi;
    gs -dNOPAUSE -dSAFER -sDEVICE=laserjet -sPAPERSIZE=a4 -sOutputFile=- -q $DATAFIL 
|| ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til 
skriveren med gs"; exit 2 );
    ;;
  *pcl*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
pcl";
    fi;
    cat $DATAFIL || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende 
data til skriveren med cat"; exit 2 );
    ;;
  *"tex dvi file"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
tex dvi file";
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å linke $DATAFIL.dvi 
til $DATAFIL";
    fi;
    ln $DATAFIL $DATAFIL.dvi || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: 
kan ikke lage $DATAFIL.dvi som link til $DATAFIL"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å kjøre dvilj -D -e- 
-q -w $DATAFIL.dvi";
    fi;
    dvilj -D -e- -q -w $DATAFIL.dvi; # Vi kan ikke stole på status til dvilj...
    ;;
  *"fig image text"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
fig image text";
    fi;
    cat $DATAFIL | fig2dev -L ps | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet 
-sOutputFile=- -q - || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende data til skriveren med fig2dev og gs"; exit 2 );
    ;;
  *"troff or preprocessor"*)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis av typen 
troff or preprocessor";
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å få grog til å finne 
hvilken kommando som skal kjøres";
    fi;
    KOMMANDO=`grog -Tps $DATAFIL` || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke finne ut hvordan troff-data skal formateres med grog"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: grog bestemte seg for å 
anbefale $KOMMANDO";
    fi;
    $KOMMANDO | gs -dNOPAUSE -dSAFER -sDEVICE=laserjet -sOutputFile=- -q - || ( logger 
-s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende data til skriveren med 
$KOMMANDO"; exit 2 );
    ;;
  *)
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: data er tydeligvis noe helt 
annet, kanskje tekst";
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å sende initstreng 
til skriveren";
    fi;
    printf "\033E\033(0N\033&k2G\033&l1S" || ( logger -s -p lpr.err -t "$PROGRAM[$$]" 
"$PROGRAM: kan ikke sende initstreng til skriveren med printf"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å sende data til 
skriveren";
    fi;
    cat $DATAFIL || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke sende 
data til skriveren med cat"; exit 2 );
    if [ "$DEBUG_NYIF" != "" ]; then
      logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: prøver å sende reset til 
skriveren";
    fi;
    printf "\033E" || ( logger -s -p lpr.err -t "$PROGRAM[$$]" "$PROGRAM: kan ikke 
sende reset til skriveren med printf"; exit 2 );
    ;;
esac

if [ "$DEBUG_NYIF" != "" ]; then
  logger -s -p lpr.debug -t "$PROGRAM[$$]" "$PROGRAM: vellykket avslutning";
fi
exit 0

# /usr/local/libexec/nyif-for-pcl

Reply via email to