#define _VFAT_	1

#include "_files32.c"

// 実体は_files32.cにあるのでここでは特に無し

/* VFATの構造
ディレクトリエントリを以下のように使いロングファイル名を格納する。
文字コードはUnicodeで１文字２バイト。
１エントリあたりの文字数は１３。

	+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
 0x00   No.[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] at -- SUM[ 6 ]
 0x10   [ 7 ] [ 8 ] [ 9 ] [ 10] [ 11] 00 00 [ 12] [ 13]
	+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F

No.はVFATエントリ順番号（最後→最初）。
[ ? ]はUnicodeでの文字数目。
0x0bは属性で常に0x0f=VSHR。
0x0cは未使用。
0x0dは８＋３ファイル名のCheckSum。
0x1a,0x1bはFAT番号で常に0x00。

ロングファイル名が１３文字以上の場合１３づつに分割され、最後から最初への逆順で格納される。
ディレクトリエントリ上ではその並びは必ず連続である。
そして、番号0x01または0x41の直後には本来のファイルエントリ=8+3ファイル名が来る。
一連の中ではCheckSumは全て同じものが入る。
FILE32では
	fp.VFATTopに先頭のFAT番号
	fp.OfstVFATTopにそのFATのクラスタ内での先頭からのオフセット
が入っている。最後は今読んでいるFATである。

その並びの中で以下の条件が発生すればそのVFATは無効とする。
・番号の並びが順でない（途中に削除エントリが入る）
・CheckSumが途中で変化した
・CheckSumが８＋３ファイル名から計算されるものと一致しない

0x00にはその番号が入るが、最後は+$40されている。
１ロングファイル名の最大長は２５５文字なので、
最後の番号は$41〜$40+255/13=$54までとなる。

ロングファイル名の終わりは、１３文字の倍数長でない時は最後に$0000が、
倍数長の時は何も入らない。すなわち、最後の番号のエントリ内に$0000があれば
その直前までが、無ければ１３文字全てが有効となる。

CheckSumはVCalcFnameSum()の計算により計算される。
	sum=0から始め
	ファイル名１バイトづつ加算
	加算後１ビット右ローテート
	これを８＋２バイト繰り返す。
	最後の１バイトは加算のみ。
	なお、８＋３に満たない部分は0x20として計算する。

VFATは以下のファイル名付けた時に作成される。
	８バイトを越えるファイル名
	３バイトを越える拡張子
	全角文字を含む（８＋３バイト以下でも）
	半角スペースを含む
	英小文字を含む

ファイル名を変更した時には、新規にエントリを作成してから元のエントリを
削除する（だからショートファイル名の番号が変わる）。

_VFILES32()ではVFATを読み取るが、以下の動作をしている。
	VFAT判定は属性=0x0f:VHSRかつfat=0である
		fat!=0の場合、そのエントリは単に無視している。
	VFATがないファイルの場合は、lname[0]=0である。
*/
