*BSD News Article 18678


Return to BSD News archive

Newsgroups: comp.os.386bsd.apps
Path: sserve!csadfa.cs.adfa.oz.au!wkt
From: wkt@csadfa.cs.adfa.oz.au (Warren Toomey)
Subject: Print PostScript on your dot-matrix (lpd filter)
Message-ID: <1993Jul21.064015.18574@sserve.cc.adfa.oz.au>
Sender: news@sserve.cc.adfa.oz.au
Organization: Australian Defence Force Academy, Canberra, Australia
Date: Wed, 21 Jul 1993 06:40:15 GMT

Here's a small hack: a lpd filter that determines if the incoming job is
a PS file, and redirects it to ghostscript to produce a bit image which
then comes out onto your dot-matrix printer.

It's a nasty hack -- anybody who can make a better one, please do! The
filter is set up to produce Epson fx80 output, but you can change the
source easily to produce laserjet or bubblejet output.

Non-PS files go straight to the dot matrix as text format. The printcap
entry I use is:

#	@(#)printcap	5.3 (Berkeley) 6/30/90

lp|lp0|uts|local line printer:\
	:lp=/dev/lpt0:sd=/var/spool/lpd:lf=/var/log/lpd-errs:pw#80:\
	:if=/usr/tmp/gsfilter:sh:

and the filter (gsfilter.c) is below.

Cheers,
	Warren wkt@csadfa.cs.adfa.oz.au


/* Filter to check if the input for the printer is PostScript
 * ( %! as first two characters), and if so, redirect the output
 * to Ghostscript. Otherwise, pass as is to the printer.
 *
 * Written by Warren Toomey wkt@csadfa.cs.adfa.oz.au
 */

#include <stdio.h>
#define GS_PROGRAM "/usr/local/bin/gs -q -I/usr/local/X11/lib/ghostscript -sDEVICE=eps9high -sOutputFile=- -"
FILE * popen();
char buf[1024];

main()
{
  FILE *gsout;
  int i;
  int c;

  c= fgetc(stdin);		/* Get the first character */
  if (c==-1)
  { fprintf(stderr, "gsfilter: No input chars\n");
    exit(1);			/* Failed, give up */
  }

  if (c != '%')
    {
     ungetc(c, stdin);		/* Not PS, push back, and go to normal */
     goto normal;		/* Yuk, a goto */
    }

  c= fgetc(stdin);		/* Get the second character */
  if (c==-1)
  { 
     ungetc(c, stdin);		/* Not PS, push back, and go to normal */
     goto normal;		/* Yuk, a goto */
  }

  if (c != '!')
   {
     ungetc(c, stdin);		/* Not PS, push back, and go to normal */
     ungetc('%', stdin);
     goto normal;		/* Yuk, a goto */
   }

ghostscript:
  ungetc('!', stdin);		/* Push back the %! */
  ungetc('%', stdin);
/*
 * Why can't I just execlp() here, instead of popen()ing a pipe?
 */
  gsout= popen( GS_PROGRAM, "w");	/* Open a pipe to gs, and send */
  while ((i = fread(buf, 1, 1024, stdin)) > 0) 
	fwrite(buf, 1, i, gsout);
  pclose(gsout);
  exit(0);


normal:
  while ((i = fread(buf, 1, 1024, stdin)) > 0) 	/* Cat our stdin */
	fwrite(buf, 1, i, stdout);
  exit(0);
 }
#! rnews 1378 sserve.cc.adfa.oz.au
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!elroy.jpl.nasa.gov!swrinde!cs.utexas.edu!natinst.com!hrd769.brooks.af.mil!hrd769.brooks.af.mil!not-for-mail
From: burgess@hrd769.brooks.af.mil (Dave Burgess)
Newsgroups: comp.os.386bsd.questions
Subject: Re: Sorry, I lost the 'drive light on and locked' patch.
Date: 20 Jul 1993 16:41:18 -0500
Organization: Armstrong Laboratory, Brooks AFB, TX
Lines: 25
Message-ID: <22hoqc$67d@hrd769.brooks.af.mil>
References: <22gd69$6j3@hrd769.brooks.af.mil> <22helq$qe6@pdq.coe.montana.edu>
NNTP-Posting-Host: hrd769.brooks.af.mil

In article <22helq$qe6@pdq.coe.montana.edu> nate@bsd.coe.montana.edu (Nate Williams) writes:
}In article <22gd69$6j3@hrd769.brooks.af.mil> burgess@hrd769.brooks.af.mil (Dave Burgess) writes:
}>
}>There was some discussion about three weeks ago about the system hang
}>where the hard drive locks up with the the drive light lit.  Someone,
}>whose name I have regretfully forgotten, posted either a description of
}>a change that (s)he had made to the system that reset the drive.
}
}rm /dev/drum
}touch /dev/drum
}
}(Maybe this should go in the FAQ. *grin*)
}
}

Not that one; it is already in the FAQ *grin* (well the pre-faq anyway).

I will try this and see if it helps.  It sure can't hurt...


-- 
------
TSgt Dave Burgess
NCOIC AL/Management Information Systems Office
Brooks AFB, TX