#include <stdio.h>

size_t fread(void *ptr,size_t size,size_t nmemb,FILE *f)
{
    size_t cnt,total=size*nmemb;
    char *p=ptr;
    long result;
    if(!f||!total) return(0);
    if((f->flags&(_READABLE|_WRITE|_ERR|_EOF))!=_READABLE) return(0);
    f->flags|=_READ;
    if(cnt=f->count){
    /*  Buffer lesen    */
        if(total<=cnt){
            memcpy(p,f->pointer,total);
            f->pointer+=total;f->count-=total;
            return(nmemb);
        }else{
            memcpy(p,f->pointer,cnt);
            total-=cnt;p+=cnt;
            f->count=0;
        }
    }
    result=Read(f->filehandle,p,total);
    if(result==-1){f->flags|=_ERR;return(cnt/size);}
    if(result<total){
        f->flags|=_EOF;
        return((cnt+result)/size);
    }else{
        return(nmemb);
    }
}
