見出し画像

Notes C API探訪: ディレクトリにNSFSearch関数検索をかけた時の情報

前回の記事で、ディレクトリを表示しているページに、そのディレクトリに含まれるDBファイルや、サブディレクトリをリストアップする機能を紹介しました。

この機能は、ディレクトリページの上部にある、Expandボタンをクリックすることで表示できます。

スクリーンショット 2021-10-23 8.06.42

クリックすると、コンテンツエリアが分割され、右ペインにテーブルが表示されます。

スクリーンショット 2021-10-23 8.08.19

少しエリアを広げてみます。

スクリーンショット 2021-10-23 8.11.47

$Pathはデータディレクトリをルートとした相対パスです。
$TypeはDBファイル($NOTEFILE)かディレクトリ($DIR)かの種類を表す文字列です。
$Infoはデータベース情報(タイトル、カテゴリ、クラス、設計クラス)で、4つの文字列データをセミコロンで区切っています。
$Lengthはファイルサイズを表しています。ただし、経験上これはバグを含んでいるのではと思っています。というのも、見ていただくとわかるとおり、ディレクトリの行は直前のファイルサイズを引きずっています。本来ここは「(no data)」としてデータが存在しないはずです。そこで、この後に登場する「$Length2」に機能を譲っていると思われます。

スクリーンショット 2021-10-23 8.15.54

$TITLEは、ぱっと見データベースタイトルとなりそうですが、意に反してファイル名になっています。
$Modifiedは最終更新日、$PHYSICALPATHは絶対パス、$LinkInfoはここでは表示されていませんが、名前から推察するにリンク情報が入っていそうです。ヘッダーファイルには以下のような記述があるので、きっとこれらの文字列、ディレクトリリンクなら「$DIRLINK」、DBリンクなら「$DBLINK」が入るのでしょう。

// stdnames.nsf

#define DBDIR_LINK_ITEM 		"$LinkInfo"
#define DBDIR_DIRECTORY_LINK 	"$DIRLINK"			/* Directory Link */
#define DBDIR_DATABASE_LINK 	"$DBLINK"			/* Database Link */

続けてみていきます。

スクリーンショット 2021-10-23 8.16.52

$Propertiesには、ディレクトリ時にのみ「Directory」という文字列が入っています。
$DBVERSIONSはODS番号(データベースの構造的なバージョン番号)のようです。
$LASTFIXUPは、最後にfixup(修復)をかけた日時でしょう。

スクリーンショット 2021-10-23 8.18.07

容量(Quota)に関わる情報などに続き、先ほど紹介した$Length2が出てきました。これは前の検索結果を引きずることなくデータがきちんとない状態になっています。
その後はデータベースオプション2〜4が続きます。

スクリーンショット 2021-10-23 8.18.39

$DATAMODは最終文書編集日時、$NONDATAMODは最終設計編集日時でしょうか。$CURRENTUSAGEは使用サイズ、$DAOS〜はDAOS関係の情報ですね。

スクリーンショット 2021-10-23 8.19.22

$STORAGEPATH(ストレージパス)、$ReplFlags(複製フラグ)、$DB2LINK(DB2のリンク)が続きます。

スクリーンショット 2021-10-23 8.20.06

$LASTCOMPACTは最後にcompact(圧縮)を実施した日時でしょう。
$NIFNSFSIZEと$NIFNSFSTATEは索引に関する情報だと思いますが、これはツールキットのヘッダーファイルには定義がありません。いわゆるアンドキュメントな情報です。

まとめ

NSFSearch関数をディレクトリに適用すると、ここまで紹介してきたデータを取得することができます。データベースに関する情報は、サマリーバッファを使うことでデータベースをオープンしなくても取れる情報があるので、上手に使うことでパフォーマンスに貢献することができそうです。

いいなと思ったら応援しよう!