Provided by: magicfilter_1.2-64_i386 bug


       magicfilter - automatic configurable printer filter


       magicfilter  config-file  [-c] [-n user] [-h host] [-iindent] [--debug]


       magicfilter is an extensible and customizable automatic printer filter.
       It  selects  an  appropriate conversion technique for the input data by
       seeking  for  magic  numbers,  and  then  utilizing   the   appropriate
       conversion utility.

       magicfilter  is  primarily  intended for use as the ``input filter'' by
       the lpd print spooler.  The options accepted by magicfilter are exactly
       the ones passed to the input filter by lpd.

       Typically  magicfilter  will  be  invoked by lpd and hence provided the
       right options automatically.  This list is included for reference only.

       Note that only the -n and -h options may have spaces between the option
       letter and the option value.

       -c     Copy  the  input to the output without any conversion whatsoever
              (used by lpd whenever  the  -l  option  is  passed  to  the  lpr

       -nuser, -n user
              The  login name of the user who submitted the job.  Available to
              subfilters as $LPUSER.  If the  user  has  an  associated  GECOS
              entry it will be available as $LPUSERNAME.

       -hhost, -h host
              The   host  on  which  the  job  was  submitted.   Available  to
              subfilters as $LPHOST.

              A numeric option passed by lpd; can be set by the user by the -i
              option  to  lpr.   Although  nominally  used  for  the amount of
              indentation  requested,  magicfilter  makes  it   available   to
              subfilters for any useful purpose as $LPINDENT.

              LPRng   class  (priority)  name.   Available  to  subfilters  as

              Format letter (passed by LPRng only).  When used as input filter
              (if)  this will be f, when used as other filter types it will be
              the option character corresponding to this filter.  Available to
              subfilters as $LPFORMAT.

              The  name  of the printer job (passed by LPRng only).  Available
              to subfilters as $LPJOB.

              Copy count (passed by LPRng only).  Available to  subfilters  as

              User   name  from  the  banner  page  (passed  by  LPRng  only).
              Available to subfilters as $BANNERNAME.

              Printer name (passed by LPRng only).  Available to subfilters as

              Spool   queue   name  (passed  by  LPRng  only).   Available  to
              subfilters as $LPQUEUE.

              Accounting information (passed by  LPRng  only).   Available  to
              subfilters as $LPACCT.

              LPRng  ``Z-options''.   The  LPRng  lpr  program  supports  a -Z
              option, which can be used to pass arbitrary information  to  the
              printer filters.  Available to subfilters as $ZOPT.

              Write  the  name  of each facility invoked (together with
              any options) to standard error.  This can be  useful  for
              debugging complicated configuration files.

       other options
              Any other options, such as the -w, -l, -x, and -y options
              typically passed by lpd are ignored.

       To run magicfilter from lpd it should be entered as one  of  the
       filters  in  the  /etc/printcap file.  Typically, it will be the
       input filter (if).  Since most version  of  lpd  do  not  accept
       arguments  entered  as  part  of  the filter name, typically the
       filter name entered into the /etc/printcap file will  simply  be
       the  name of the configuration file, which is set executable and
       starts with the line:

       #! /usr/sbin/magicfilter

       Most UNIX kernels will then be able to treat  the  configuration
       file itself as if it was the actual program.

       For systems which do not support the ``#!-hack'', the filter set
       in the if entry should point to magicfilter  directly,  and  the
       accounting  file  (af)  entry  should point to the configuration
       file.   This,  however,  is  a  less  general,  and  hence  less
       desirable solution.

       This  version  of magicfilter supports the enhanced lpd included
       with the LPRng package from

       The configuration  file  is  used  by  magicfilter  to  redirect
       various  types of data to the various conversion utilities.  The
       configuration  file  is  printer-specific,  and  often   system-
       specific,  depending  on the available conversion programs.  For
       example, a system which has GhostScript installed would be  able
       to  print  PostScript to a non-PostScript printer, whereas other
       systems typically would not.

       The configuration file contains a sequence of lines of the form:

       offset    magic     facility

       where the offset represents the location of the  indentification
       string  in  the data format, magic represents the identification
       string itself, facility represents the type of action to take.

       Blank lines and lines with a hash mark (#) as the first nonblank
       character  are  ignored.   A line may be continued onto the next
       line by ending the line in a backslash (\).

       The offset is a nonnegative integer, which  can  be  represented
       either in decimal form (default), octal form (preceded by 0), or
       hexadecimal form (preceded by 0x).

       The magic is a string of characters, which may  include  C-style
       \-escape sequences.  In addition, the sequence \? can be used to
       represent a ``wildcard'' byte.  If the string  includes  spaces,
       the  spaces  have  to  be preceded by a backslash, or the entire
       string must be enclosed in double quotation marks.

       For ambiguous matches, the first match is used.  Hence, the most
       specific  match  should  always be placed first in the file.  In
       addition, the last line may be of the form:

       default   facility

       which designates a default action to be used in  case  no  other
       action  matches.   This  will  typically be the action for plain

       magicfilter provides the  following  options  for  the  facility
       field in the configuration file:

       cat [prefix [suffix]]
              Copy the input to the output without any conversion, like
              the cat command.   If  the  optional  prefix  and  suffix
              strings  are  specified,  they  are  transmitted  to  the
              printer immediately before and  after  the  data  itself.
              The  prefix  and suffix strings are specified in the same
              way  as  the  magic  string  (except  that  the  wildcard
              sequence  \?  is  not  permitted),  and  like  the  magic
              sequence can contain  any  control  character,  including
              nulls  (\0).   To  specify  a  suffix  without  a prefix,
              specify an empty prefix string enclosed in double  quotes
              (i.e. "").

       text [prefix [suffix]]
              Copy  the  input  to  the output, but add carriage return
              characters before every line feed and form feed character
              in the file, and a line feed-form feed sequence at end of
              file.  The prefix and suffix arguments  are  treated  the
              same way as for the cat facility; the suffix, if present,
              is added after the final line feed-form feed sequence.

              Same as the text facility, except add an ASCII EOT (Ctrl-
              D)  character  to  the  end  of  the  data.   This lets a
              PostScript printer know that the end of the job has  been
              reached.  This is functionally equivalent to the command

              text "" \004

       ignore Ignore the job; do not provide any output whatsoever.

       reject message
              Same as the ignore facility, but attempt to send an email
              message to the user who submitted the job to inform  that
              a job has been rejected and why.

       filter command
              Run  the  given  command,  feeding it the input data, and
              sending the output data to the printer.  The  environment
              variables  LPUSER,  LPHOST,  and  LPINDENT  is set to the
              values of the user, host and  indent  options  passed  to
              magicfilter.   Since the command is fed to /bin/sh it may
              contain  shell  special  characters,  and  the  sequences
              $LPUSER, $LPHOST, and $LPINDENT can be used to access the
              values of the passed environment variables.  If  the  lpd
              daemon  on the system is LPRng, the following environment
              variables are also available, see the OPTIONS section for
              PRINTER, LPQUEUE, LPACCT, and ZOPT.

       pipe command
              Same as the filter facility, except that the output  data
              is  fed  back into magicfilter for reprocessing.  This is
              used for external filter programs which themselves do not
              produce  a  format that the printer can accept, but which
              can be futher processed to obtain such a format.

       ffilter command

       fpipe command
              Same as the filter  and  pipe  facilities,  respectively,
              except  that  the  input  is  written to a temporary file
              before being fed to the filter program given by  command.
              This is useful for programs which require seekable input,
              such as dvips, or which need to do multiple  passes  over
              an  input  file,  such as grog.  The environment variable
              FILE is set to the name of the temporary file (and,  like
              the other ones, it can be accessed on the command line as


       Using the pipe facility together with zcat or  gunzip  lets  you
       transparently print compressed files.

       The  pbmplus or netpbm collections of image conversion utilities
       contain a large number of very useful external filter programs.

       You will probably want to examine the sample configuration files
       included  with the magicfilter distribution before creating your


       Some data formats cannot be easily identified by a simple fixed-
       offset magic number check.

       Providing large offsets can cause magicfilter to take up lots of
       memory.  Fortunately, large offsets for magic numbers are pretty
       much unheard of.

       Currently,  there  is  no  protection  against the pipe or fpipe
       facilities going into an infinite loop.


       H. Peter Anvin <>


       printcap(5),  lpr(8),   dvips(1),   grog(1),   gs(1),   gzip(1),