/* buffer.c - implementacao do buffer circular * (c) AC - 2008-2011 - LEI - DI-FCT/UNL */ #include #include #include "bufcirc.h" #define MAX 1024 int put; /* onde se inserem novos caracteres */ int get; /* de onde se retiram caracteres */ int nc; /* numero de caracteres no buffer */ char buffer[MAX];/* o buffer */ void fatal_error( char *s ) { fprintf( stderr, "ERRO: %s\n", s ); exit(1); } void buf_init(void) { put = 0; get = 0; nc = 0; } void buf_put( char c ) { if( buf_full() ) fatal_error( "buf_put com buffer cheio" ); buffer[put] = c; put = (put + 1) % MAX ; nc++ ; } char buf_get( void ) { char c; if( buf_empty() ) fatal_error( "buf_get com buffer vazio" ); c = buffer[get]; get = (get + 1) % MAX ; nc-- ; return c; } int buf_empty( void ) { return (nc == 0); } int buf_full( void ) { return (nc == MAX); }