ToolTalk サービスでは、オブジェクト仕様の検査、比較、照会、および移動を行う関数を提供しています。表 12-2 に、オブジェクト仕様を管理するために使用する ToolTalk 関数を示します。
表 12-2 オブジェクト仕様を管理する関数
返される型 |
ToolTalk 関数 |
説明 |
---|---|---|
char * |
tt_spec_file(const char *objid) |
仕様があるファイル名 |
char * |
tt_spec_type(const char *objid) |
仕様のオブジェクト型 |
char * |
tt_spec_prop(const char *objid, const char *propname, int i) |
(ゼロから数えて)「i」番目のプロパティ値を文字列として検索する |
int |
tt_spec_prop_count(const char *objid, const char *propname) |
このプロパティ名での値の数 |
Tt_status |
tt_spec_bprop(const char *objid, const char *propname, int i, unsigned char **value, int *length) |
このプロパティ名でのバイト配列の値の数 |
char * |
tt_spec_propname(const char *objid, int i) |
「i 番目」のプロパティ名 |
int |
tt_spec_propnames_count(const char *objid) |
この仕様のプロパティ数 |
char * |
tt_objid_objkey(const char *objid) |
仕様 ID に固有のキー |
Tt_status |
tt_file_objects_query(const char *filepath, Tt_filter_function filter, void *context, void *accumulator) |
オブジェクト仕様用のデータベースを照会する |
int |
tt_objid_equal(const char *objid1, const char *objid2) |
2 つの仕様 ID が等しいかどうかを検査する |
char * |
tt_spec_move(const char *objid, const char *newfilepath) |
オブジェクト仕様を新しいファイルに移動する |
指定された ToolTalk 関数によって、次の仕様情報を検査できます。
2 つの objid を比較するには、tt_objid_equal を使用します。tt_objid_equal は、1 つの objid が他の objid に対する転送ポインタの場合でも 1 を返します。
ファイル内の特定の仕様を照会するためにフィルタ関数を作成し、対象とする仕様を取得します。
tt_file_objects_query を使って、指定されたファイル内のすべてのオブジェクトを見つけます。ToolTalk サービスは、各オブジェクトを見つけるとフィルタ関数を呼び出し、そのオブジェクトの objid とアプリケーションが与えた 2 つのポインタをそのフィルタ関数に渡します。フィルタ関数は演算をいくつか行い、Tt_filter_action の値 (TT_FILTER_CONTINUE
または TT_FILTER_STOP
) を返します。これは照会を続行するか、検出を終了してすぐに復帰するかを示します。
例 12-1 は、仕様リストの取得方法を示します。
tt_file_objects_query 関数内では、アプリケーションは、オブジェクトをスクロールリストに挿入するフィルタ関数 cntl_gather_specs を呼び出します。例 12-2 に objid の挿入方法を示します。
objid には、仕様情報が格納された特定のファイルシステムを指すポインタが入っています。仕様によって記述されたオブジェクトと同じように仕様情報を利用できるようにするため、ToolTalk サービスは仕様情報をそのオブジェクトと同じファイルシステムに格納します。そのため、オブジェクトが移動すると、仕様も移動しなければなりません。
tt_spec_move を使用して、オブジェクトが 1 つのファイルから別のファイルにいつ移動したか (たとえば、カット&ペースト操作などで) を ToolTalk サービスに知らせます。
新しい objid が不要な場合 (新旧のファイルが両方同じファイルシステム内にあるために)、ToolTalk サービスは TT_WRN_SAME_OBJID
を返します。
オブジェクトが別のファイルシステムに移動した場合、ToolTalk サービスはそのオブジェクトの新しい objid を返し、古い objid から新しい objid を指す転送ポインタを ToolTalk データベースに残します。
プロセスが古い objid にメッセージを送信する場合 (つまり、転送ポインタを持つ objid)、tt_message_send は特殊な状態コード TT_WRN_STALE_OBJID
を返し、メッセージ内のオブジェクト属性を新しい場所の同じオブジェクトを指す新しい objid と置き換えます。
オブジェクトを参照する内部データ構造体は、すべて新しい objid に更新してください。