Annotation of researchv9/jtools/src/sunlib/kbdrcv.c, revision 1.1.1.1

1.1       root        1: #include "jerq.h"
                      2: #include "rcv.h"
                      3: 
                      4: #define RCVBUFSIZE     1024
                      5: #define        HIBUF           1000
                      6: #define        LOWBUF          256
                      7: 
                      8: static unsigned char rcvbuffer[RCVBUFSIZE];    /* buffer for rcv input */
                      9: struct Jrcvbuf Jrcvbuf = {rcvbuffer, rcvbuffer, rcvbuffer, 0, RCVBUFSIZE, 0 };
                     10: 
                     11: rcvchar ()
                     12: {
                     13:        int i;
                     14: 
                     15:        if (!Jrcvbuf.cnt)
                     16:                return -1;
                     17:        i = *Jrcvbuf.out++;
                     18:        if(Jrcvbuf.out == &Jrcvbuf.buf[Jrcvbuf.size])
                     19:                Jrcvbuf.out = Jrcvbuf.buf;
                     20:        if(--Jrcvbuf.cnt == 0)
                     21:                P->state &= ~RCV;
                     22:        if (Jrcvbuf.blocked && Jrcvbuf.cnt <= LOWBUF)
                     23:                Jrcvbuf.blocked = 0;
                     24:        return(i);
                     25: }
                     26: 
                     27: rcvbfill(buf, cnt)
                     28: register unsigned char *buf;
                     29: {
                     30:        register i;
                     31:        unsigned char *ebuf;
                     32: 
                     33:        if (Jrcvbuf.cnt == Jrcvbuf.size)
                     34:                return;
                     35:        ebuf = &Jrcvbuf.buf[Jrcvbuf.size];
                     36:        i = min (cnt, Jrcvbuf.size - Jrcvbuf.cnt);
                     37:        P->state |= RCV;
                     38:        Jrcvbuf.cnt += i;
                     39:        if (Jrcvbuf.cnt >= HIBUF)
                     40:                Jrcvbuf.blocked = 1;
                     41:        while (i--) {
                     42:                *Jrcvbuf.in++ = *buf++;
                     43:                if (Jrcvbuf.in == ebuf)
                     44:                        Jrcvbuf.in = Jrcvbuf.buf;
                     45:        }
                     46: }
                     47: 
                     48: #define KBDBUFSIZE     128
                     49: static unsigned char kbdbuffer[KBDBUFSIZE];    /* buffer for kbd input */
                     50: static struct {
                     51:        unsigned char *buf;
                     52:        unsigned char *in;
                     53:        unsigned char *out;
                     54:        int cnt;
                     55:        int size;
                     56: } kbdbuf = {kbdbuffer, kbdbuffer, kbdbuffer, 0, KBDBUFSIZE};
                     57: 
                     58: kbdchar ()
                     59: {
                     60:        int i;
                     61: 
                     62:        if(!kbdbuf.cnt)
                     63:                return -1;
                     64:        i = *kbdbuf.out++;
                     65:        if(kbdbuf.out == &kbdbuf.buf[kbdbuf.size])
                     66:                kbdbuf.out = kbdbuf.buf;
                     67:        if(--kbdbuf.cnt == 0)
                     68:                P->state &= ~KBD;
                     69:        return(i);
                     70: }
                     71: 
                     72: kbdread (cp)
                     73: unsigned char *cp;
                     74: {
                     75:        if(kbdbuf.cnt == kbdbuf.size)
                     76:                return;
                     77:        *kbdbuf.in++ = *cp;
                     78:        kbdbuf.cnt++;
                     79:        if(kbdbuf.in == &kbdbuf.buf[kbdbuf.size])
                     80:                kbdbuf.in = kbdbuf.buf;
                     81: }

unix.superglobalmegacorp.com

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