2 * Hyper Operating System Application Framework
5 * @brief %jp{FATボリューム用デバイスドライバ}
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
12 #ifndef __HOS__fatvol_h__
13 #define __HOS__fatvol_h__
16 #include "system/sysapi/sysapi.h"
17 #include "system/file/volumeobj.h"
20 #define FATVOL_ERR_OK 0
21 #define FATVOL_ERR_NG (-1)
25 typedef long FATVOL_INT;
26 typedef unsigned long FATVOL_UINT;
28 struct t_fatvol_clusterbuf;
31 typedef struct c_fatvol
33 C_VOLUMEOBJ VolumeObj; /* ボリュームオブジェクトを継承 */
35 HANDLE hBlockFile; /**< ブロックデバイスドライバのハンドル */
37 SYSMTX_HANDLE hMtx; /**< ロック用ミューテックス */
39 int iOpenCount; /**< オープンカウンタ */
41 int iFatType; /**< FATのタイプ */
42 FILE_POS Offset; /**< ディスクのオフセット */
43 FILE_POS DriveSize; /**< ドライブの総サイズ */
44 FATVOL_UINT BytesPerSector; /**< セクタサイズ */
45 FATVOL_UINT SectorsPerCluster; /**< クラスタあたりのセクタ数 */
46 FATVOL_UINT BytesPerCluster; /**< クラスタサイズ */
47 FATVOL_UINT FatStartSector; /**< FATの開始セクタ番号 */
48 FATVOL_UINT SectorNum; /**< 総セクタ数 */
49 FATVOL_UINT SectorPerFat; /**< FATあたりのセクタ数 */
50 FATVOL_UINT FatNum; /**< FATの個数 */
51 FATVOL_UINT RootDirEntryNum; /**< ルートディレクトリのエントリ数 */
52 FATVOL_UINT RootDirSector; /**< ルートディレクトリのセクタ */
53 FATVOL_UINT Cluster0Sector; /**< クラスタ0のセクタ番号 */
54 FATVOL_UINT ClusterNum; /**< 総クラスタ数 */
55 FATVOL_UINT RootDirCluster; /**< ルートディレクトリのクラスタ番号 */
57 unsigned char *pubFatBuf; /**< FATのバッファリングメモリ */
58 unsigned char *pubFatDirty; /**< FATの更新フラグ */
60 struct t_fatvol_clusterbuf *pClusterBuf;
62 // int iClusterBufIndex;
70 int FatVol_Create(C_FATVOL *self, const char *pszPath);
71 void FatVol_Delete(C_DRVOBJ *self);
73 HANDLE FatVol_CreateFile(C_FATVOL *self, FATVOL_UINT uiCluster, HANDLE hDir, int iDirEntry, int iMode);
80 #endif /* __HOS__fatdrive_h__ */