Annotation of 43BSDReno/contrib/jove/kbd.c, revision 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.