/* Ringpuffer */ /* Datei: ringbufr.c */ #include #include #include "ringbufr.h" int ringpuffer_init (ringpuffer * rp, int size) { if (size < 0) return EOF; rp->puffer = (char *) malloc (size); rp->laenge = size; rp->leseindex = 0; rp->schreibindex = 0; return 0; }; void ringpuffer_kill (ringpuffer * rp) { free (rp->puffer); }; int ringpuffer_get (ringpuffer * rp) { int zwi; if (rp->belegt > 0) { rp->belegt--; zwi = rp->puffer[rp->leseindex++]; if (rp->leseindex >= rp->laenge) rp->leseindex = 0; return zwi; } else return EOF; } int ringpuffer_put(ringpuffer *rp,int wert) { if (rp->belegt < rp->laenge) { rp->belegt++; rp->puffer[rp->schreibindex++] = wert; if (rp->schreibindex >= rp->laenge) rp->schreibindex = 0; return wert; } else return EOF; } void ringpuffer_clear (ringpuffer * rp) { rp->leseindex = 0; rp->schreibindex = 0; rp->belegt = 0; }