フィルタ関数とコールバックに渡された情報によって ToolTalk サービスの動作を変える特殊な実装方法もあります。ToolTalk サービスが呼び出すコールバックルーチンとフィルタルーチンは、次に示す 2 種類の引数を伴って呼び出されます。
コンテキスト引数は、ToolTalk サービスからアプリケーションに渡されます。ポインタが参照する API オブジェクトは、コールバックまたはフィルタ関数が戻るとすぐに、ToolTalk サービスによって解放されます。これらのオブジェクトのどれかを保持したい場合は、関数が戻る前にそのオブジェクトをコピーしなければなりません。
フィルタ関数とコールバックに渡された情報に対する ToolTalk サービスの動作方法は特殊な場合です。他の場合はユーザーが解放するまでは、ToolTalk サービスが API 割り当てスタック内に情報を格納します。
ToolTalk サービスの機能の 1 つとして、メッセージ、パターン、およびフィルタのコールバックサポートがあります。コールバックは、特定のメッセージが届いたとき (「メッセージコールバック」)、またはメッセージが登録済みの特定のパターンに一致するとき (「パターンコールバック」) に ToolTalk が呼び出すプログラム内のルーチンです。
これらのコールバックについて ToolTalk サービスに知らせるには、メッセージを送信する前またはパターンを登録する前に、メッセージまたはパターンにコールバックを追加します。
tt_file_objects_query() などのファイル照会関数を呼び出す場合、照会から項目を返すときに、ToolTalk サービスが呼び出すフィルタルーチンを指します。たとえば、特定のオブジェクトを見つけるには、ToolTalk ファイル照会関数が使用するフィルタルーチンを使用できます。
tt_file_objects_query() 関数は、ファイルにすべてのオブジェクトを返し、ユーザーが与えるフィルタルーチンを介してそのオブジェクトを実行します。一度フィルタルーチンが指定されたオブジェクトを見つければ、tt_malloc() を使用して記憶場所を作成し、オブジェクトをそこにコピーできます。フィルタ関数が戻ると、ToolTalk サービスはファイル内でオブジェクトが使用する記憶領域をすべて解放しますが、tt_malloc() 呼び出しによって格納したオブジェクトは、それ以降も利用できます。