../../_images/Logo_OCW10.jpg
// Biblioteca para gestionar un buffer circular
//////////////////////////////////////////////

#include <stdio.h>
#include <string.h>
#include "buffer_circular.h"

static char buffer[TAM_BUFFER];
static int in= 0, out= 0, n= 0; // Indices para gestionar el buffer circular

void insertar (char msg)
{
   buffer[in]= msg;  // Si overflow, sobreescribe el msg más antiguo
   in= (in+1)%TAM_BUFFER;
   if (n<TAM_BUFFER) n++;
   else out= (out+1)%TAM_BUFFER;
}

int retirar (char* msg)
{
   if (n==0) {
      *msg= '\b';
      return 0;
   }
   else {
      *msg= buffer[out];
      out= (out+1)%TAM_BUFFER;
      n--;
   return 1;
   }
}

void imprimir_buffer()
{
   int i, j;

   for (i=out, j=1; j<=n; j++, i=(i+1)%TAM_BUFFER)
       printf("%c", buffer[i]);
}
../../_images/Licencia10.jpg