#include <stdlib.h>
#include <stdio.h>

int ungetc(int c,FILE *f)
{
    if(!f) return(EOF);
    if((f->flags&(_READABLE|_WRITE|_ERR|_EOF))!=_READABLE) return(EOF);
    f->flags|=_READ;
    if(!f->bufsize){if(f->flags&_UNBUF) f->bufsize=1; else f->bufsize=BUFSIZ;}
    if(!f->base){
        if(!(f->base=(char *)malloc(f->bufsize+1)+1))
            return(EOF);
        f->pointer=f->base;
    }
    if(f->pointer<f->base){
    /*  Buffer voll und bereits ein Zeichen reingestopft, also wird es  */
    /*  ueberschrieben                                                  */
        return(*f->pointer=c);
    }
    f->count++;
    return(*--f->pointer=c);
}
