os/libc/devbuf.c
2020-07-22 19:35:23 -05:00

39 lines
655 B
C

#include <devbuf.h>
#include <stdio.h>
#include <stdlib.h>
devbuf* devbuf_init() {
devbuf* buf=malloc(sizeof(devbuf));
buf->rd=0;
buf->wr=0;
for (int i=0;i<256;i++) {
buf->buf[i]=EOF;
}
return buf;
}
void devbuf_add(char byte,devbuf* buf) {
buf->buf[buf->wr]=byte;
buf->wr++;
if (buf->wr==buf->rd) {
buf->wr--;
}
}
int devbuf_get(devbuf* buf) {
if (buf->buf[buf->rd]==-1) {
buf->rd++;
if (buf->buf[buf->rd]==-1) {
buf->rd--;
while (buf->buf[buf->rd]==-1);
}
}
int data=buf->buf[buf->rd];
buf->buf[buf->rd]=-1;
buf->rd++;
if (buf->rd>buf->wr) {
buf->rd=buf->wr-1;
}
return data;
}