|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.