#include "fat32.h"

size_t fread32(void *buff,size_t elesz,size_t count,FILE32 *fp)
// 現在のシーク位置から読み出す
// 指定するバイト数を buff に読み込む. 実行後、ファイルポインタは読み込んだバイ
// ト数だけ後方に移動する.
// 返値が指定したバイト数より小さければ、ファイルを終わりまで読み込んだことを意味する
{
size_t cnt=0,sz;
unchar *b;
	b=(unchar *)buff;
	if (fp->ungetc!=SYM_UNGETC) { // 戻されている１バイトがある
		*b++=(unchar)fp->ungetc;
		elesz--;
  	  	fp->ungetc=SYM_UNGETC; // 戻されていた１バイトを消す
	}
	while (cnt<count) {
		sz=elesz;
		while (sz>0) {
			if (fp->seek>=fp->filelen) { // ファイル最後まで行った
				// fp->seek=fp->filelenである
				goto FR1;
			}
			if (fp->ofst>=fp->clu1byte) { // buff[]を読み切っている
				if (CluRead(fp)) return(-1); // 読み取りエラー
				// fp->ofst=0
			}
			*b++=fp->buff[fp->ofst++];
			fp->seek++;
			sz--;
		}
		// ちゃんとelesz分読めたら＋１する
		cnt++;
	}
    FR1:;
	return(cnt);
}
