queue.c 566 B

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