.. include:: ../../my-header_2.txt

.. code-block:: c


	// 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]);  
	}

.. include:: ../../my-footer_2.txt
