Annotation of 43BSDReno/contrib/jove/kbd.c, revision 1.1.1.1

1.1       root        1: #include "jove.h"
                      2: #include <signal.h>
                      3: #include <errno.h>
                      4: 
                      5: 
                      6: #ifdef BSD_SIGS
                      7: # define pause()       sigpause(0L)
                      8: #endif
                      9: 
                     10: struct header {
                     11:        int     pid,
                     12:                nbytes;
                     13:        char    buf[10];
                     14: };
                     15: 
                     16: #define HEADER_SIZE    (2 * sizeof (int))
                     17: 
                     18: /* JOVE sends SIGQUIT whenever it wants the kbd process (this program)
                     19:    to stop competing for input from the keyboard.  JOVE does this when
                     20:    JOVE realizes that there are no more interactive processes running.
                     21:    The reason we go through all this trouble is that JOVE slows down
                     22:    a lot when it's getting its keyboard input via a pipe. */
                     23: 
                     24: static SIGRESULT strt_read proto((int));
                     25: 
                     26: static SIGRESULT
                     27: hold_read(junk)
                     28: int    junk;   /* passed in when invoked by a signal; of no interest */
                     29: {
                     30:        signal(SIGQUIT, strt_read);
                     31:        pause();
                     32:        SIGRETURN;
                     33: }
                     34: 
                     35: static SIGRESULT
                     36: strt_read(junk)
                     37: int    junk;
                     38: {
                     39:        signal(SIGQUIT, hold_read);
                     40:        SIGRETURN;
                     41: }
                     42: 
                     43: int
                     44: main(argc, argv)
                     45: int    argc;
                     46: char   **argv;
                     47: {
                     48:        struct header   header;
                     49:        int     pid,
                     50:                n;
                     51: 
                     52:        signal(SIGINT, SIG_IGN);
                     53:        pid = getpid();
                     54:        header.pid = pid;
                     55: 
                     56:        hold_read(0);
                     57:        for (;;) {
                     58:                n = read(0, header.buf, sizeof (header.buf));
                     59:                if (n == -1) {
                     60:                        if (errno != EINTR)
                     61:                                break;
                     62:                        continue;
                     63:                }
                     64:                header.nbytes = n;
                     65:                write(1, (UnivPtr) &header, HEADER_SIZE + n);
                     66:        }
                     67:        return 0;
                     68: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.