#include "defines.h"
#include "ascsi.h"
#include "acdata.h"	// ctol80()
#include "FAT32.h"
#include <error.h>

// FAT32になるとFATだけでも何メガバイトにもなることがあるので全部メモリー上に置くことは出来ない。
// そこで、必要時に必要部分だけ読むようにした＝遅い。

unlong NextFat(FILE32 *fp,unlong fat)
// 次のFAT番号を得る
// return : =0:error , !=0:FAT番号
{
	if (fat<fp->fbufffat || fat>=fp->fbufffat+FATS1SEC) {
	    unlong sec;
		// 現在のfbuffの中にfat辺りのデータがない→読み込む
		// fatのあるセクター番号を計算
		sec=fp->secfat1+fat/FATS1SEC; // FATの先頭セクター
		if (S_SecRead(sec,1,fp->scsiid,fp->blksz,(unchar *)fp->fbuff)) {
			fp->error=ENODEV;
			return(0L); // 読めない
		}
		// 読み込んだ領域の先頭FAT番号
		fp->fbufffat=(fat/FATS1SEC)*FATS1SEC;
	}
	// fbuff[]内にFAT[fp->fat]のデータがある
	fat=ctol80((unchar *)&fp->fbuff[fat-fp->fbufffat]); // 記録されているのは次のFAT番号
	return(fat);
}
