# FS_COMMAND_SEEKDIR

## 定義

  `FSResult FS_ARCHIVE_PROC_FUNC(FSFile *p_file, FSCommandType command /* = FS_COMMAND_SEEKDIR */);
  `

## 説明

アーカイブコマンド `FS_COMMAND_SEEKDIR の動作仕様を以下に示します`。

このコマンドに渡される引数

>     p_file に格納された変数 arg.seekdir をコマンド引数とします。
>     この変数は nitro/fs/file.h にて以下のように定義されています。

>     typedef struct {
>        FSDirPos pos;
>     } FSSeekDirInfo;

> 引数の内容は以下のとおりです。

引数 | 内容
pos | 移動させるべきディレクトリ位置が FSDirPos 型で格納されています。 この値は、FS_COMMAND_READDIR コマンドが生成します。

このコマンドに要求される動作

>     p_file の変数 prop.dir を以下のように設定します。

>     ・引数 の pos が格納しているディレクトリ位置を prop.dir.pos へ設定します。
>       ただし pos.index と pos.pos がともに 0 の場合はディレクトリ列挙位置の先頭を意味します。
>       設定した値は、以降の FS_COMMAND_SEEKDIR コマンドおよび FS_COMMAND_READDIR コマンドで使用されます。
>       これらのコマンドに対して正当な引数になるのであれば、pos の各変数の意味については独自に取り決めて構いません。

>     ・引数 の pos が指し示すディレクトリ位置の親ディレクトリにあたるインデックスを prop.dir.parent に設定します。
>       ただし pos.own_id が 0 の場合はルートディレクトリを意味します。
>       ルートディレクトリの場合 prop.dir.parent にはディレクトリ総数を設定します。
>       設定した値は、以降の FS_COMMAND_GETPATH コマンドで使用されます。

デフォルトの実装

> 以下の取り決めに基づいて値を設定します。

prop.dir.pos.arc | 引数をそのまま使用
prop.dir.pos.own_id | 引数をそのまま使用
prop.dir.pos.index | FNTの、次のディレクトリエントリが存在する位置 ( NitroROMフォーマットに準拠 )
prop.dir.pos.pos | 次のディレクトリエントリがファイルだった場合の、そのインデックス これは FS_COMMAND_READ が成功するたびに 1 ずつ増加 ( NitroROMフォーマットに準拠 )
prop.dir.parent | 親ディレクトリのインデックスまたはディレクトリ総数 ( NitroROMフォーマットに準拠 )

> これらの情報はアーカイブのFNTがNitroROMフォーマットに準拠していることを前提にして、
> pos.own_id で示されるFNTインデックスからアーカイブのリードコールバック関数を用いて取得します。

コマンドの結果

>     FS_RESULT_SUCCESS を返した場合、p_file はディレクトリ位置情報を格納したハンドルになり、
>     以降は FS_IsDir 関数で TRUE を返すようになります。
>     また、ディレクトリを操作する関数の引数に使われるようになります。

このコマンドが使用される関数

> FS_SeekDir
> FS_RewindDir
> ( デフォルトの 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/12 初版