

FSResult FS_ARCHIVE_PROC_FUNC(FSFile *p_file, FSCommandType command /*
= FS_COMMAND_READDIR */);
アーカイブコマンド FS_COMMAND_READDIR の動作仕様を以下に示します。
p_file に格納された変数 arg.readdir をコマンド引数とします。
この変数は nitro/fs/file.h にて以下のように定義されています。
typedef struct
{
FSDirEntry *p_entry;
BOOL skip_string;
} FSReadDirInfo;
引数の内容は以下のとおりです。
| 引数 | 内容 |
| p_entry | ディレクトリエントリの情報を格納すべきFSDirEntry構造体へのポインタです。 コマンドの結果を、このポインタの指すメモリへ格納します。 |
| skip_string | この値が FALSE でない場合のみ、p_entry の name バッファに 名前文字列を格納しなくても構いません。(格納しても構いません) |
p_file は常に、prop.dir にディレクトリ位置情報を格納したハンドルです。 p_file の変数 prop.dir に基づいて以下のように設定します。 ・引数の p_entry が指し示す FSDirEntry 構造体の各変数を正しく設定します。 p_file が指す次のディレクトリエントリがファイル情報である場合は p_entry->is_directory に 0 を設定して p_entry->file_id にファイルIDを設定します。 設定した値は、以降の FS_COMMAND_OPENFILEFAST コマンドで使用されます。 p_file が指す次のディレクトリエントリがディレクトリ情報である場合は p_entry->is_directory に 1 を設定して p_entry->dir_id にディレクトリ位置を設定します。 設定した値は、以降の FS_COMMAND_SEEKDIR コマンドで使用されます。 いずれの場合も、p_entry->skip_string が FALSE であれば p_entry->name に ファイル名またはディレクトリ名を終端の '\0' も含めて格納します。 また、この名前の長さを p_entry->name_len に設定します。 次のディレクトリエントリ情報が不正な場合、またはディレクトリ位置が終端の場合は何も行いません。 そうでない場合、上記設定を行ったのちに p_file のディレクトリ位置情報を次へ進めます。 この情報は、以降の FS_COMMAND_SEEKDIR コマンドおよび FS_COMMAND_READDIR コマンドで使用されます。
以下の取り決めに基づいて値を設定します。
| p_entry->is_directory | 次のディレクトリエントリがファイルなら 0、ディレクトリなら 1 |
| p_entry->file_id | ファイルID (次のディレクトリエントリがファイルの場合に限る) インデックスは prop.dir.index を指定 |
| p_entry->dir_id | ディレクトリ位置 (次のディレクトリエントリがディレクトリの場合に限る) index = 0, pos = 0 によって先頭を指定 |
| p_entry->name_len | 次のディレクトリエントリの名前文字列長 |
| p_entry->name | 次のディレクトリエントリの名前文字列 |
これらの情報はアーカイブのFNTがNitroROMフォーマットに準拠していることを前提にして、
prop.dir.pos.pos で示されるFNTエントリブロックからアーカイブのリードコールバック関数を用いて取得します。
FS_RESULT_SUCCESS を返した場合、引数 p_entry の指すアドレスには 今回のディレクトリエントリが正しく格納されたと判断されます。 それ以外を返した場合、ディレクトリエントリの終端に達したかまたは 何らかのエラーにより列挙が中止されたと判断されます。 いずれの場合も、以降再び p_file に対してこのコマンドが呼ばれることがあります。
FS_ReadDir
( デフォルトの FS_FINDPATH コマンドから間接的に )
FS_ChangeDir
FS_OpenFile
FS_ConvertPathToFileID
( デフォルトの FS_GETPATH コマンドから間接的に )
FS_GetPathName
FS_GetPathLength
FSArchive
FS_ARCHIVE_PROC_FUNC
FS_COMMAND_*
FS_SetArchiveProc
2004/07/28 「skip_string が FALSE でなければ」を「skip_string が FALSE であれば」に修正
2004/07/12 初版