***************
*** 85,90 ****
  char	indent[10] = "-i0";	/* indentation size in characters */
  char	tempfile[] = "errsXXXXXX"; /* file name for filter output */
  
  printjob()
  {
  	struct stat stb;
--- 85,92 ----
  char	indent[10] = "-i0";	/* indentation size in characters */
  char	tempfile[] = "errsXXXXXX"; /* file name for filter output */
  
+ static short SF;		/* suppress FF on each print job */
+ 
  printjob()
  {
  	struct stat stb;
***************
*** 266,272 ****
  	 */
  	for (i = 0; i < 4; i++)
  		strcpy(fonts[i], ifonts[i]);
- 	strcpy(width+2, "0");
  	strcpy(indent+2, "0");
  
  	/*
--- 268,274 ----
  	 */
  	for (i = 0; i < 4; i++)
  		strcpy(fonts[i], ifonts[i]);
+ 	sprintf(&width[2], "%d", PW);
  	strcpy(indent+2, "0");
  
  	/*
***************
*** 589,595 ****
  		while ((pid =
  		    wait3((int *)&status, WUNTRACED, 0)) > 0 && pid != ofilter)
  			;
- 		if (status.w_stopval != WSTOPPED) {
  			(void) close(fi);
  			syslog(LOG_WARNING, "%s: output filter died (%d)",
  				printer, status.w_retcode);
--- 591,597 ----
  		while ((pid =
  		    wait3((int *)&status, WUNTRACED, 0)) > 0 && pid != ofilter)
  			;
+ 		if (!WIFSTOPPED(status)) {
  			(void) close(fi);
  			syslog(LOG_WARNING, "%s: output filter died (%d)",
  				printer, status.w_retcode);
***************
*** 1114,1123 ****
  		FC = 0;
  	if ((FS = pgetnum("fs")) < 0)
  		FS = 0;
- 	if ((XC = pgetnum("xc")) < 0)
- 		XC = 0;
- 	if ((XS = pgetnum("xs")) < 0)
- 		XS = 0;
  	tof = !pgetflag("fo");
  }
  
--- 1116,1121 ----
  		FC = 0;
  	if ((FS = pgetnum("fs")) < 0)
  		FS = 0;
  	tof = !pgetflag("fo");
  }
  
***************
*** 1230,1244 ****
   */
  setty()
  {
- 	struct sgttyb ttybuf;
  	register struct bauds *bp;
  
- 	if (ioctl(pfd, TIOCEXCL, (char *)0) < 0) {
- 		syslog(LOG_ERR, "%s: ioctl(TIOCEXCL): %m", printer);
- 		exit(1);
- 	}
- 	if (ioctl(pfd, TIOCGETP, (char *)&ttybuf) < 0) {
- 		syslog(LOG_ERR, "%s: ioctl(TIOCGETP): %m", printer);
  		exit(1);
  	}
  	if (BR > 0) {
--- 1228,1238 ----
   */
  setty()
  {
+ 	struct termios ttybuf;
  	register struct bauds *bp;
  
+ 	if (ioctl(pfd, TCGETS, (char *)&ttybuf) < 0) {
+ 		syslog(LOG_ERR, "%s: ioctl(TCGETS): %m", printer);
  		exit(1);
  	}
  	if (BR > 0) {
***************
*** 1249,1273 ****
  			syslog(LOG_ERR, "%s: illegal baud rate %d", printer, BR);
  			exit(1);
  		}
- 		ttybuf.sg_ispeed = ttybuf.sg_ospeed = bp->speed;
  	}
- 	ttybuf.sg_flags &= ~FC;
- 	ttybuf.sg_flags |= FS;
- 	if (ioctl(pfd, TIOCSETP, (char *)&ttybuf) < 0) {
- 		syslog(LOG_ERR, "%s: ioctl(TIOCSETP): %m", printer);
  		exit(1);
- 	}
- 	if (XC) {
- 		if (ioctl(pfd, TIOCLBIC, &XC) < 0) {
- 			syslog(LOG_ERR, "%s: ioctl(TIOCLBIC): %m", printer);
- 			exit(1);
- 		}
- 	}
- 	if (XS) {
- 		if (ioctl(pfd, TIOCLBIS, &XS) < 0) {
- 			syslog(LOG_ERR, "%s: ioctl(TIOCLBIS): %m", printer);
- 			exit(1);
- 		}
  	}
  }
  
--- 1243,1255 ----
  			syslog(LOG_ERR, "%s: illegal baud rate %d", printer, BR);
  			exit(1);
  		}
+ 		ttybuf.c_cflag = (ttybuf.c_cflag &= ~CBAUD) | bp->speed;
  	}
+ 	ttybuf.c_cflag &= ~FC;          /* not quite right! */
+ 	ttybuf.c_cflag |= FS;           /* not quite right! */
+ 	if (ioctl(pfd, TCSETS, (char *)&ttybuf) < 0) {
+ 		syslog(LOG_ERR, "%s: ioctl(TCSETS): %m", printer);
  		exit(1);
  	}
  }
  
