Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site seismo.CSS.GOV Posting-Version: version B 2.10.2 9/3/84; site panda.UUCP Path: seismo!harvard!talcott!panda!sources-request From: sources-request@panda.UUCP Newsgroups: mod.sources Subject: LaserJet sources for BSD 4.2+ Message-ID: <872@panda.UUCP> Date: 4 Sep 85 12:38:45 GMT Sender: jpn@panda.UUCP Lines: 206 Approved: jpn@panda.UUCP Mod.sources: Volume 3, Issue 9 Submitted by: ihnp4!psivax!friesen (Stanley Friesen) The following contains the filters and printcap entry which we use to run a LaserJet printer as a spooled printer device under lpd. It takes care of *most* of the funnies. The worst problem is still the buffer overflow, since even using LLITOUT UNIX does not stop output fast enough after a ^S for the LaserJet. We have solved that problem by sticking a Microbuffer external buffer between the computer and the LaserJet, our system now works quite smoothly. ----------------------------------Cut Here-------------------------------- #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # hpf.c # lzcat.c # printcap # This archive created: Tue Sep 3 10:17:46 1985 export PATH; PATH=/bin:$PATH echo shar: extracting "'hpf.c'" '(1665 characters)' if test -f 'hpf.c' then echo shar: will not over-write existing file "'hpf.c'" else cat << \SHAR_EOF > 'hpf.c' #include "stdio.h" #include int nomap = 0, is_of = 1; main(ac, av) int ac; char **av; { while(ac > 1 && av[1][0] == '-') { switch(av[1][1]) { case 'c': nomap = 1; break; case 'n': case 'h': is_of = 0; break; default: break; } ac--; av++; } lzinit(); hpcat(); exit(0); } #include lzinit() { struct sgttyb nbuf; unsigned long lbits; setbuf(stdout, NULL); /* Work around to by-pass bug in terminal driver and force LITOUT */ lbits = LMDMBUF|LLITOUT; ioctl(fileno(stdout), TIOCLSET, &lbits); ioctl(fileno(stdout), TIOCGETP, &nbuf); nbuf.sg_flags &= ~(ECHO|XTABS|CRMOD); /* While we're at it, set the mode */ ioctl(fileno(stdout), TIOCSETP, &nbuf); fputs("\033&k3G", stdout); /* Set device to sane mode */ } hpcat() { register int c, cnt = 0; while((c = getchar()) != EOF) { if(c == '\t') { do { delay(); putchar(' '); cnt++; } while(cnt%8 != 0); } else if(is_of && c == '\031') { if(getchar() == '\001') kill(getpid(), SIGSTOP); } else { delay(); putchar(c); if(c == '\f' || c == '\n') { cnt = 0; } else cnt++; } } } #include struct timeval tm = {0, 1500}; delay() { select(0, 0, 0, 0, &tm); } /* Old version, hope to use again later #include #include int wakeup; void nullfunc(){ wakeup = 1; } struct itimerval tm = {{0, 0}, {0, 1500}}; delay() { void nullfunc(); signal(SIGALRM, nullfunc); wakeup = 0; if(setitimer(ITIMER_REAL, &tm, NULL)) exit(1); while(wakeup == 0) sigpause(0); } */ SHAR_EOF fi # end of overwriting check echo shar: extracting "'lzcat.c'" '(695 characters)' if test -f 'lzcat.c' then echo shar: will not over-write existing file "'lzcat.c'" else cat << \SHAR_EOF > 'lzcat.c' #include "stdio.h" int nomap = 0; main(ac, av) int ac; char **av; { lzinit(); lzcat(); exit(0); } #include lzinit() { struct sgttyb nbuf; unsigned long lbits; setbuf(stdout, NULL); /* Work around to by-pass bug in terminal driver and force LITOUT */ lbits = LMDMBUF|LLITOUT; ioctl(fileno(stdout), TIOCLSET, &lbits); ioctl(fileno(stdout), TIOCGETP, &nbuf); nbuf.sg_flags &= ~(ECHO|XTABS|CRMOD); /* While we're at it, set the mode */ ioctl(fileno(stdout), TIOCSETP, &nbuf); fputs("\033&k3G", stdout); /* Set device to sane mode */ } lzcat() { register int c; while((c = getchar()) != EOF) { putchar(c); } } SHAR_EOF fi # end of overwriting check echo shar: extracting "'printcap'" '(201 characters)' if test -f 'printcap' then echo shar: will not over-write existing file "'printcap'" else cat << \SHAR_EOF > 'printcap' lz|laserjet|Hewlett-Packard Laserjet:\ :lp=/dev/tty23:sd=/usr/spool/lqd:br#9600:pw#132:pl#60:\ :xs#060:fc#0177477:lf=/usr/adm/lpd-errs:if=/usr/local/hpf:\ :of=/usr/local/hpf:vf=/usr/local/lzcat:rs: SHAR_EOF fi # end of overwriting check # End of shell archive exit 0