/* ringbuffer.c Stewart, August 16, 1982 3:24 PM */ #include "env.h" struct CBuf { char *buf; int len, rp, wp; }; InitRingBuffer(p, buffer, length) struct CBuf *p; char *buffer; int length; { p->buf = buffer; p->len = length; p->wp = p->rp = 0; }; int RingBufferEmpty(p) struct CBuf *p; { if (p->wp == p->rp) return(true); else return(false); }; int RingBufferFull(p) struct CBuf *p; { int np; np = p->wp + 1; if (np >= p->len) np = 0; if (np == p->rp) return(true); else return(false); }; int WriteRingBuffer(p, c) struct CBuf *p; char c; { int np; if (RingBufferFull(p)) return(false); IWDC(); np = p->wp + 1; if (np >= p->len) np = 0; p->buf[np] = c; p->wp = np; DWDC(); return(true); }; int ReadRingBuffer(p) struct CBuf *p; { int np, c; if (RingBufferEmpty(p)) return(-1); IWDC(); np = p->rp + 1; if (np >= p->len) np = 0; c = p->buf[np]; p->rp = np; DWDC(); return(c & 0377); };