|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T b
Length: 2951 (0xb87) Types: TextFile Names: »bsdio.c«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12 └─⟦883b7f77d⟧ »dvi2vdu.tar.Z« └─⟦f158c222e⟧ └─⟦this⟧ »dvi2vdu/dvi2vdu-1.1J/src/bsdio.c«
/* Original author Alex Dickinson Procedures for setting and resetting UNIX tty characteristics. Interesting functions are: savetty(); restoretty(); echoon(); echooff(); singlecharon(); singlecharoff(); buffercount(); suspend(); A side effect of calling savetty() is to set up signal handling to reset the terminal characteristics appropriately for the various interrupt signals. This version converted to C and ported to BSD and System V UNIX by some chaps at Kernel Technology up to September 1989. Contact mjh@uk.co.kernel (Mark J. Hewitt) with bug fixes etc. Involved were: Mark J. Hewitt Dave Dixon Marc Hadley */ #include "def.h" #include <sgtty.h> #include <signal.h> static char *sccsid[] = "@(#)bsdio.c 1.1"; struct sgttyb initchars; /* store initial terminal characteristics */ /* Save the original tty characteristics and set up the signalling. */ void savetty () { (void) ioctl (1, TIOCGETP, (char *)&initchars); setsignals (); } /* Restore the original tty characteristics. */ void restoretty () { (void) ioctl (1, TIOCSETN, (char *)&initchars); } /* Set driver to read characters as they are typed without waiting for a terminator. Echo remains unchanged. */ void singlecharon () { struct sgttyb s; (void) ioctl (1, TIOCGETP, (char *)&s); s.sg_flags |= CBREAK; (void) ioctl (1, TIOCSETN, (char *)&s); (void) fflush (stdin); } /* Turn off single character read mode. */ void singlecharoff () { struct sgttyb s; (void) ioctl (1, TIOCGETP, (char *)&s); s.sg_flags &= ~CBREAK; (void) ioctl (1, TIOCSETN, (char *)&s); } /* Turn character echoing on. */ void echoon () { struct sgttyb s; (void) ioctl (1, TIOCGETP, (char *)&s); s.sg_flags |= ECHO; (void) ioctl (1, TIOCSETN, (char *)&s); } /* Turn character echoing off. */ void echooff () { struct sgttyb s; (void) ioctl (1, TIOCGETP, (char *)&s); s.sg_flags &= ~ECHO; (void) ioctl (1, TIOCSETN, (char *)&s); } /* Return the number of characters currently in the input buffer. */ int getcharnowait () { long count; (void) ioctl (1, FIONREAD, (char *)&count); if (count == 0) return (EOF); else return (getchar ()); } /* Yukko */ realungetc (ch, filed) char ch; int filed; { (void) ioctl (filed, TIOCSTI, &ch); } /* Catch signals from tty. If sig is an interrupt, put 0 and terminator into the buffer. Otherwise it was a suspend, so we put 1 and terminator into buffer. */ handleint (sig) int sig; { (void) fflush (stdin); if (sig == SIGINT) { realungetc (0, 0); } else { realungetc (1, 0); } } /* Signal initialization. */ setsignals () { (void) signal (SIGINT, handleint); (void) signal (SIGTSTP, handleint); } /* Suspend the process */ void suspend () { (void) signal (SIGTSTP, SIG_DFL); (void) kill (0, SIGTSTP); /* resumed again, goody! */ setsignals (); }