1*74a4d8c2SCharles.Forsyth #include "u.h" 2*74a4d8c2SCharles.Forsyth #include "lib.h" 3*74a4d8c2SCharles.Forsyth #include "mem.h" 4*74a4d8c2SCharles.Forsyth #include "dat.h" 5*74a4d8c2SCharles.Forsyth #include "fns.h" 6*74a4d8c2SCharles.Forsyth #include "io.h" 7*74a4d8c2SCharles.Forsyth 8*74a4d8c2SCharles.Forsyth int qgetc(IOQ * q)9*74a4d8c2SCharles.Forsythqgetc(IOQ *q) 10*74a4d8c2SCharles.Forsyth { 11*74a4d8c2SCharles.Forsyth int c; 12*74a4d8c2SCharles.Forsyth 13*74a4d8c2SCharles.Forsyth if(q->in == q->out) 14*74a4d8c2SCharles.Forsyth return -1; 15*74a4d8c2SCharles.Forsyth c = *q->out; 16*74a4d8c2SCharles.Forsyth if(q->out == q->buf+sizeof(q->buf)-1) 17*74a4d8c2SCharles.Forsyth q->out = q->buf; 18*74a4d8c2SCharles.Forsyth else 19*74a4d8c2SCharles.Forsyth q->out++; 20*74a4d8c2SCharles.Forsyth return c; 21*74a4d8c2SCharles.Forsyth } 22*74a4d8c2SCharles.Forsyth 23*74a4d8c2SCharles.Forsyth static int qputc(IOQ * q,int c)24*74a4d8c2SCharles.Forsythqputc(IOQ *q, int c) 25*74a4d8c2SCharles.Forsyth { 26*74a4d8c2SCharles.Forsyth uchar *nextin; 27*74a4d8c2SCharles.Forsyth if(q->in >= &q->buf[sizeof(q->buf)-1]) 28*74a4d8c2SCharles.Forsyth nextin = q->buf; 29*74a4d8c2SCharles.Forsyth else 30*74a4d8c2SCharles.Forsyth nextin = q->in+1; 31*74a4d8c2SCharles.Forsyth if(nextin == q->out) 32*74a4d8c2SCharles.Forsyth return -1; 33*74a4d8c2SCharles.Forsyth *q->in = c; 34*74a4d8c2SCharles.Forsyth q->in = nextin; 35*74a4d8c2SCharles.Forsyth return 0; 36*74a4d8c2SCharles.Forsyth } 37*74a4d8c2SCharles.Forsyth 38*74a4d8c2SCharles.Forsyth void qinit(IOQ * q)39*74a4d8c2SCharles.Forsythqinit(IOQ *q) 40*74a4d8c2SCharles.Forsyth { 41*74a4d8c2SCharles.Forsyth q->in = q->out = q->buf; 42*74a4d8c2SCharles.Forsyth q->getc = qgetc; 43*74a4d8c2SCharles.Forsyth q->putc = qputc; 44*74a4d8c2SCharles.Forsyth } 45