Annotation of researchv10dc/ncurses/screen/draino.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Code for various kinds of delays.  Most of this is nonportable and
        !             3:  * requires various enhancements to the operating system, so it won't
        !             4:  * work on all systems.  It is included in curses to provide a portable
        !             5:  * interface, and so curses itself can use it for function keys.
        !             6:  */
        !             7: 
        !             8: /*     @(#) draino.c: 1.1 10/15/83     (1.10   3/6/83) */
        !             9: 
        !            10: #include "curses.ext"
        !            11: #include <signal.h>
        !            12: 
        !            13: #define NAPINTERVAL 100
        !            14: #define HZ 60
        !            15: 
        !            16: /* From early specs - this may change by 4.2BSD */
        !            17: struct _timeval {
        !            18:        long tv_sec;
        !            19:        long tv_usec;
        !            20: };
        !            21: 
        !            22: /*
        !            23:  * Wait until the output has drained enough that it will only take
        !            24:  * ms more milliseconds to drain completely.
        !            25:  * Needs Berkeley TIOCOUTQ ioctl.  Returns ERR if impossible.
        !            26:  */
        !            27: int
        !            28: draino(ms)
        !            29: int ms;
        !            30: {
        !            31:        int ncthere;    /* number of chars actually in output queue */
        !            32:        int ncneeded;   /* number of chars = that many ms */
        !            33:        int rv;         /* ioctl return value */
        !            34: 
        !            35: #ifdef TIOCOUTQ
        !            36: # define _DRAINO
        !            37:        /* 10 bits/char, 1000 ms/sec, baudrate in bits/sec */
        !            38:        ncneeded = baudrate() * ms / (10 * 1000);
        !            39:        for (;;) {
        !            40:                ncthere = 0;
        !            41:                rv = ioctl(cur_term->Filedes, TIOCOUTQ, &ncthere);
        !            42: #ifdef DEBUG
        !            43:                fprintf(outf, "draino: rv %d, ncneeded %d, ncthere %d\n",
        !            44:                        rv, ncneeded, ncthere);
        !            45: #endif
        !            46:                if (rv < 0)
        !            47:                        return ERR;     /* ioctl didn't work */
        !            48:                if (ncthere <= ncneeded) {
        !            49:                        return 0;
        !            50:                }
        !            51:                napms(NAPINTERVAL);
        !            52:        }
        !            53: #endif
        !            54: 
        !            55: #ifdef TCSETAW
        !            56: # define _DRAINO
        !            57:        /*
        !            58:         * USG simulation - waits until the entire queue is empty,
        !            59:         * then sets the state to what it already is (e.g. no-op).
        !            60:         * Unfortunately this only works if ms is zero.
        !            61:         */
        !            62:        if (ms <= 0) {
        !            63:                ioctl(cur_term->Filedes, TCSETAW, cur_term->Nttyb);
        !            64:                return OK;
        !            65:        }
        !            66: #endif
        !            67: 
        !            68: #ifndef _DRAINO
        !            69:        /* No way to fake it, so we return failure. */
        !            70:        /* Used #else to avoid warning from compiler about unreached stmt */
        !            71:        return ERR;
        !            72: #endif
        !            73: }

unix.superglobalmegacorp.com

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