/* calculadora polaca inversa: getch.c */

/* para reunir los caracteres que forman un n£mero, hay que leer d¡gitos  |
|  hasta que se lee el punto decimal u otro caracter, pero para entonces  |
|  se ha le¡do ya un caracter de m s. La funci¢n getch() lee un caracter, |
|  y la funci¢n ungetch() lo devuelve a la entrada para se rele¡do.      */

#include <stdio.h>
#define BUFFER 100	/* largo del arreglo para buffer de caracteres */

static char buf[BUFFER];	/* buffer de caracteres */
static int pbuf = 0;		/* posici¢n en el buffer de caracteres */

/* getch: obtiene un caracter, acaso devuelto al buffer */
int getch(void)
{
  if (pbuf > 0)			/* si el buffer no est  vac¡o...    */
    return buf[--pbuf]; 	/* devuelve caracter del buffer.    */
   else				/* si el buffer est  vac¡o...       */
    return getchar();		/* lee nuevo caracter de la entrada */
}

/* ungetch: devuelve caracter a la entrada */
void ungetch(int c)
{
  if (pbuf >= BUFFER)
    printf("ungetch: demasiados caracteres, se agot¢ el buffer\n");
  else
    buf[pbuf++] = c;
}

