(57)【要約】【課題】ウィジェットに対する操作をチャネルの生成機能を持つタプル空間型通信システムが提供するチャネルを用いた入出力として実行できるようにする。【解決手段】プログラムコードの要求に応じて、ウィジェットとこれに対応するチャネルを新規に生成し、これらを対応付けて保持するステップ（ステップＳ４３）と、ウィジェットの属性をタプル空間に送信するステップ（ステップＳ３９）と、ウィジェットの属性を変更するステップ（ステップＳ３９）と、ウィジェットをクローズして終了するステップ（ステップＳ４５）とを備える。また、イベントが発生したときに呼び出される関数の引数をタプル空間に送信するステップを備える。【選択図】  図５
2005346434.tif 000002
【特許請求の範囲】
【請求項１】
ネットワーク内に配置された共有メモリを有するタプル空間を用いてホスト装置の間で情報の共有および交換をチャネルを介して行うタプル空間型通信システムにおいて、前記ホスト装置の表示画面上で発生するイベントに応じた処理を行うオブジェクトであるウィジェットに対する操作を前記チャネルを用いた入出力として実行するウィジェット操作方法であって、
ウィジェットの生成が要求されたときに、ウィジェットを生成するとともに、前記ウィジェットに対応するチャネルを生成し、前記ウィジェットと前記チャネルとを対応付けて保持するステップと、
前記ウィジェットの属性読出が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットの属性を前記タプル空間に送信するステップと、
前記ウィジェットの属性変更が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットの属性を変更するステップと、
前記イベントが発生したときに呼び出される関数の引数を前記タプル空間に送信するステップと、
前記ウィジェットのクローズと終了が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットをクローズして終了するステップと
を備えることを特徴とするウィジェット操作方法。
【請求項２】
ネットワーク内に配置された共有メモリを有するタプル空間を用いてホスト装置の間で情報の共有および交換をチャネルを介して行うタプル空間型通信システムにおいて、前記ホスト装置の表示画面上で発生するイベントに応じた処理を行うオブジェクトであるウィジェットに対する操作を前記チャネルを用いた入出力として実行するウィジェット操作装置であって、
ウィジェットの生成が要求されたときに、ウィジェットを生成するとともに、前記ウィジェットに対応するチャネルを生成し、前記ウィジェットと前記チャネルとを対応付けて保持するウィジェット生成保持手段と、
前記ウィジェットの属性読出が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットの属性を前記タプル空間に送信する属性読出送信手段と、
前記ウィジェットの属性変更が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットの属性を変更する属性変更手段と、
前記イベントが発生したときに呼び出される関数の引数を前記タプル空間に送信する引数送信手段と、
前記ウィジェットのクローズと終了が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットをクローズして終了するクローズ終了手段と
を備えることを特徴とするウィジェット操作装置。
【請求項３】
ネットワーク内に配置された共有メモリを有するタプル空間を用いてコンピュータの間で情報の共有および交換をチャネルを介して行うタプル空間型通信システムにおいて、前記コンピュータの表示画面上で発生するイベントに応じた処理を行うオブジェクトであるウィジェットに対する操作を前記チャネルを用いた入出力として実行させるウィジェット操作プログラムであって、
ウィジェットの生成が要求されたときに、ウィジェットを生成するとともに、前記ウィジェットに対応するチャネルを生成し、前記ウィジェットと前記チャネルとを対応付けて保持するステップと、
前記ウィジェットの属性読出が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットの属性を前記タプル空間に送信するステップと、
前記ウィジェットの属性変更が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットの属性を変更するステップと、
前記イベントが発生したときに呼び出される関数の引数を前記タプル空間に送信するステップと、
前記ウィジェットのクローズと終了が要求されたときに、この要求により指定されたチャネルに対応する前記ウィジェットをクローズして終了するステップと
を前記コンピュータに実行させるためのウィジェット操作プログラム。
【請求項４】
請求項３に記載のウィジェット操作プログラムを記録した機械読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ウィジェットに対する操作を行うウィジェット操作方法に関し、特に、ウィジェットに対する操作をタプル空間型通信システムで提供されるチャネルを用いた入出力として実行するウィジェット操作方法に関する。
【背景技術】
【０００２】
従来より、タプル空間による通信システムが知られている。この通信システムでは、タプル空間と呼ばれる通信サーバ（交換機）をネットワーク内に配置し、このタプル空間に複数のホスト装置からデータの投入および読出を行うことにより、各ホスト装置で実行される計算機プログラムの間で情報を共有および交換を行うことができる。
また、タプル空間による通信システムの中でも、データ通信路としてのチャネルを生成する機能を持つタプル空間型通信システムが知られている（例えば、非特許文献１を参照。）。この通信システムでは、計算機プログラムが過去に使われていないチャネルを生成する機能を持ち、新規生成チャネルを用いた計算機プログラム間の秘密通信を実現することができる。
【０００３】
一方、Ｘウィンドウシステム、ＱＴ、Ａｌｌｅｇｒｏ  Ｃｏｍｍｏｎ  ＬｉｓｐのＣｏｍｍｏｎ  Ｇｒａｐｈｉｃｓなどのウィンドウシステムは、計算機プログラムが画面を操作するために、ＧＵＩ（Graphic User Interface）のボタンやスクロール・バーなど、ウィジェットと呼ばれる画面描画の構成要素を単位とした操作を実現している（例えば、非特許文献２を参照。）。ウィジェットには、変更可能な属性があり、評価関数を用いてその属性の読出や変更などの操作を行うことができる。ウィンドウシステムには、ウィジェットが表示された画面上の領域にマウスポインタが表示されているときにマウスのボタンがクリックされたなどの事象（これらをイベントと総称する）を検出する機能がある。このため、各ウィジェットにおいてイベント毎に評価関数の名前を予め設定しておくことにより、イベントの検出時にそのイベントに対応する評価関数を呼び出し、その評価関数に応じた処理を行うことができる。
【０００４】
なお、出願人は、本明細書に記載した先行技術文献情報で特定される先行技術文献以外には、本発明に関連する先行技術文献を出願時までに発見するには至らなかった。
【非特許文献１】E.Horita and K.Mano,“Nepi: A Network Programming Language Based on the π-calculus", in COORDINATION 96, LNCS Vol.1061, Springer, pp.424-427, 1996
【非特許文献２】Franz Inc.,“Common Graphics Integrated Development Environment" in http://www.franz.com/support/documentation/6.2/doc/cgide.htm
【非特許文献３】Pawel T.Wojciechowski,“Nomadic Pict Language Libraries" in http://lsrwww.epfl.ch/%7Epawel/npict-library.ps.gz
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来、ウィジェットに対する操作には、評価関数を逐次的に並べる形式で記述したプログラムコードが用いられていた。しかし、この形式でプログラムコードを記述する方法は難しく、データの入出力による形式でプログラムコードを記述する方法の方が容易であるという指摘があった。
よって、前述したタプル空間型通信システムにおけるタプル空間とホスト装置との間のチャネルを用いた通信を、ウィジェットに対する操作を実行するためのデータの入出力として利用することができれば、ウィジェットに対する操作に後者の形式で記述したプログラムコードを用いることが可能となる。
【０００６】
なお、非特許文献３には、チャネルの生成機能を持つタプル空間型通信システムと類似のシステム上で、画面の操作を実現する方法が示されている。しかし、ウィジェットに対する操作を通信として実行する方法については示されていない。
【０００７】
本発明は、このような状況に鑑みてなされたものであり、その目的は、ウィジェットに対する操作をチャネルの生成機能を持つタプル空間型通信システムが提供するチャネルを用いた入出力として実行できるようにすることにある。
【課題を解決するための手段】
【０００８】
このような目的を達成するために、本発明に係るウィジェット操作方法は、ネットワーク内に配置された共有メモリを有するタプル空間を用いてホスト装置の間で情報の共有および交換をチャネルを介して行うタプル空間型通信システムにおいて、ホスト装置の表示画面上で発生するイベントに応じた処理を行うオブジェクトであるウィジェットに対する操作をチャネルを用いた入出力として実行するウィジェット操作方法であって、ウィジェットの生成が要求されたときに、ウィジェットを生成するとともに、ウィジェットに対応するチャネルを生成し、ウィジェットとチャネルとを対応付けて保持するステップと、ウィジェットの属性読出が要求されたときに、この要求により指定されたチャネルに対応するウィジェットの属性をタプル空間に送信するステップと、ウィジェットの属性変更が要求されたときに、この要求により指定されたチャネルに対応するウィジェットの属性を変更するステップと、イベントが発生したときに呼び出される関数の引数をタプル空間に送信するステップと、ウィジェットのクローズと終了が要求されたときに、この要求により指定されたチャネルに対応するウィジェットをクローズして終了するステップとを備えることを特徴とする。
【０００９】
また、本発明に係るウィジェット操作装置は、ネットワーク内に配置された共有メモリを有するタプル空間を用いてホスト装置の間で情報の共有および交換をチャネルを介して行うタプル空間型通信システムにおいて、ホスト装置の表示画面上で発生するイベントに応じた処理を行うオブジェクトであるウィジェットに対する操作をチャネルを用いた入出力として実行するウィジェット操作装置であって、ウィジェットの生成が要求されたときに、ウィジェットを生成するとともに、ウィジェットに対応するチャネルを生成し、ウィジェットとチャネルとを対応付けて保持するウィジェット生成保持手段と、ウィジェットの属性読出が要求されたときに、この要求により指定されたチャネルに対応するウィジェットの属性をタプル空間に送信する属性読出送信手段と、ウィジェットの属性変更が要求されたときに、この要求により指定されたチャネルに対応するウィジェットの属性を変更する属性変更手段と、イベントが発生したときに呼び出される関数の引数をタプル空間に送信する引数送信手段と、ウィジェットのクローズと終了が要求されたときに、この要求により指定されたチャネルに対応するウィジェットをクローズして終了するクローズ終了手段とを備えることを特徴とする。
【００１０】
また、本発明に係るウィジェット操作プログラムは、前述のウィジェット操作方法の各ステップをホスト装置を構成するコンピュータに実行させるためのプログラムである。
また、本発明に係る記録媒体は、このウィジェット操作プログラムを記録した機械読み取り可能な記録媒体である。
【発明の効果】
【００１１】
本発明では、プログラムコードの要求に応じて、ウィジェットの生成時にこのウィジェットに対応するチャネルを新規に生成し、ウィジェットを読み出しそのウィジェットの属性をタプル空間に送信し、ウィジェットを読み出しそのウィジェットの属性を変更し、ウィジェットをクローズして終了する。また、イベントが発生したときに呼び出される関数の引数をタプル空間に送信する。これにより、ウィジェットに対する操作をチャネルの生成機能を持つタプル空間型通信システムが提供するチャネルを用いた入出力として実行することができる。
その結果、ウィジェットに対する操作に、データの入出力による形式で記述したプログラムコードを用いることができる。よって、ウィジェットに対する操作を実行するためのプログラムコードを従来よりも容易に記述できるようになる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照に、本発明の一実施の形態について詳細に説明する。
図１は、チャネルの生成機能を持つタプル空間型通信システムの構成を示すブロック図である。この図に示すタプル空間型通信システムは、ネットワーク１内に配置されたタプル空間２と、複数のホスト装置３Ａ，３Ｂ，３Ｃ，…，３Ｎとから構成される。なお、ホスト装置３Ａ〜３Ｎを総称して、ホスト装置３と書く場合がある。
【００１３】
ここで、タプル空間２は、ネットワーク１内に配置された共有メモリとこの共有メモリを管理する管理手段とからなり、ホスト装置３Ａ〜３Ｎのそれぞれからリクエストを受け取り、データの保持および削除を行う。タプル空間２に保持されるデータをタプルと呼ぶ。
リクエストには、送信リクエスト（ｓｅｎｄ，ａ，ｂ）および受信リクエスト（ｒｅｃｅｉｖｅ，ａ）の２つがある。送信リクエスト（ｓｅｎｄ，ａ，ｂ）の第１要素ｓｅｎｄは送信リクエストであることを示す記号、第２要素ａはチャネルを表す値であるチャネル識別子、第３要素ｂは送信データである。受信リクエスト（ｒｅｃｅｉｖｅ，ａ）の第１要素ｒｅｃｅｉｖｅは受信リクエストであることを示す記号、第２要素ａはチャネル識別子である。
【００１４】
タプル空間２は、送信リクエストおよび受信リクエストをホスト装置３Ａ〜３Ｎのそれぞれから受け取り、送信リクエストおよび受信リクエストをタプル空間２に逐次蓄積する。そして、同じチャネル識別子ａを持つ送信リクエスト（ｓｅｎｄ，ａ，ｂ）および受信リクエスト（ｒｅｃｅｉｖｅ，ａ）が同時にタプル空間２内に存在するかどうかを調べる。同時に存在する場合には、送信リクエスト（ｓｅｎｄ，ａ，ｂ）および受信リクエスト（ｒｅｃｅｉｖｅ，ａ）をタプル空間２から削除し、送信リクエスト（ｓｅｎｄ，ａ，ｂ）の送信元ホスト装置（例えば３Ａ）に送信完了メッセージを送るとともに、受信リクエスト（ｒｅｃｅｉｖｅ，ａ）の送信元ホスト装置（例えば３Ｂ）に受信メッセージｂを送る。また、受信リクエスト（ｒｅｃｅｉｖｅ，ａ）と同じチャネル識別子ａを持つ送信リクエストがタプル空間２内に存在しない場合には、受信リクエスト（ｒｅｃｅｉｖｅ，ａ）の送信元ホスト装置（例えば３Ｂ）に受信メッセージＮＵＬＬを送る。
【００１５】
図２は、ホスト装置３の一構成例を示すブロック図である。この図に示すホスト装置３は、リクエスト送信部３１と、結果受信部３２と、新規チャネル生成部３３と、ウィジェットテーブル部３４と、メモリ上に実現される実行部３５と、ウィンドウシステム３６とを持つ。実行部３５はさらに、複数個のプログラムコード実行部４１（４１−１，４１−２）と、イベントテーブル４２と、評価関数名対応表４３と、複数個のイベント評価関数部４４（４４−１，４４−２）とからなる。なお、本実施の形態において、「ウィジェット」とは、Ａｌｌｅｇｒｏ  Ｃｏｍｍｏｎ  ＬｉｓｐのＣｏｍｍｏｎ  Ｇｒａｐｈｉｃｓにおけるｗｉｄｇｅｔと同義とする。
【００１６】
ここで、実行部３５およびウィジェットテーブル部３４は、Ｌｉｓｐ言語と同様のリスト（例えば、（ａ  ｂ  ｃ  ｄ）など）を処理する。なお、長さ２のリストを「組」と呼ぶことがある。
プログラムコード実行部４１、ウィジェットテーブル部３４およびイベント評価関数部４４は、リストを用いて表現されたプログラムコードを処理するため、以下に示す評価関数を呼び出す。
【００１７】
・評価関数ｃｏｎｓ：入力としてデータＡとリストＢをとり、第１要素をＢとするようなリストを返す。例えば、ｃｏｎｓ（（ａ），（ｂ  ｃ  ｄ））は（ａ  ｂ  ｃ  ｄ）を返す。
・評価関数１ｓｔ：入力としてリストをとり、その第１要素を取り出して返す。例えば、１ｓｔ（（ａ  ｂ  ｃ  ｄ））はａを返す。
・評価関数２ｎｄ：入力としてリストをとり、その第２要素を取り出して返す。例えば、２ｎｄ（（ａ  ｂ  ｃ  ｄ））はｂを返す。
・評価関数３ｒｄ：入力としてリストをとり、その第３要素を取り出して返す。例えば、３ｒｄ（（ａ  ｂ  ｃ  ｄ））はｃを返す。
・評価関数４ｔｈ：入力としてリストをとり、その第４要素を取り出して返す。例えば、４ｔｈ（（ａ  ｂ  ｃ  ｄ））はｄを返す。
【００１８】
・評価関数ｌｉｓｔ１：入力としてデータＡをとり、Ａからなるリスト（Ａ）を返す。例えば、ｌｉｓｔ１（ａ）は（ａ）を返す。
・評価関数ｌｉｓｔ２：入力としてデータＡ，Ｂをとり、Ａ，Ｂからなるリスト（Ａ  Ｂ）を返す。例えば、ｌｉｓｔ２（ａ，ｂ）は（ａ  ｂ）を返す。
・評価関数ｌｉｓｔ３：入力としてデータＡ，Ｂ，Ｃをとり、Ａ，Ｂ，Ｃからなるリスト（Ａ  Ｂ  Ｃ）を返す。例えば、ｌｉｓｔ３（ａ，ｂ，１０）は（ａ  ｂ  １０）を返す。
・評価関数ｌｉｓｔ４：入力としてデータＡ，Ｂ，Ｃ，Ｄをとり、Ａ，Ｂ，Ｃ，Ｄからなるリスト（Ａ  Ｂ  Ｃ  Ｄ）を返す。例えば、ｌｉｓｔ４（ａ，ｂ，１０，”ｈｅｌｌｏ”）は（ａ  ｂ  １０  ”ｈｅｌｌｏ”）を返す。
【００１９】
・評価関数ａｓｓｏｃ：ａｓｓｏｃ（ｘ，ｙ）は、連想リストｙに入っているキーｘの要素を取り出す。ａｓｓｏｃ（ｘ，ｙ）は、Ｌｉｓｐ言語の（ａｓｓｏｃ  ｘ  ｙ  ：ｔｅｓｔ  ’ｅｑｕａｌ）と同義である。例えば、ａｓｓｏｃ（ａ，（（ａ  ｘ）  （ｂ  ｙ）））は（ａ  ｘ）を返す。
・評価関数ｓｕｂｓｔｉｔｕｔｅ：Ｌｉｓｐ言語のｓｕｂｓｔ関数と同様。すなわち、ｓｕｂｓｔｉｔｕｔｅ（ｘ，ｙ，ｚ）は、リストｚに自由に現れる値ｙを、値ｘで置き換える。例えば、ｓｕｂｓｔｉｔｕｔｅ（ｄａｔａ，ａ，（ａ  ｂ  ｃ））は（ｄａｔａ  ｂ  ｃ）を返す。
・評価関数ａｐｐｌｙ：入力として評価関数の名前ＡとデータＢをとり、Ｂを引数として評価関数Ａを呼び出し、その結果得られた値を返す。ａｐｐｌｙ（Ａ，Ｂ）は、Ｌｉｓｐ言語の（ａｐｐｌｙ  ’Ａ  （ｌｉｓｔ  Ｂ））と同義である。例えば、ａｐｐｌｙ（２ｎｄ，（ａ  ｂ））はｂを返す。
【００２０】
プログラムコード実行部４１およびイベント評価関数部４４は、ウィジェット操作のため、以下の評価関数を呼び出す。
・評価関数ｍａｋｅ−ｉｎｓｔａｎｃｅ：入力としてウィジェットのクラスをとり、そのクラスのインスタンスであるウィジェットを生成し、生成されたウィジェットへのポインタを返す。なお、実行部３５では、ウィジェットへのポインタをウィジェットそのものとして取り扱う。ｍａｋｅ−ｉｎｓｔａｎｃｅ（Ａ）は、Ａｌｌｅｇｒｏ  Ｃｏｍｍｏｎ  ＬｉｓｐのＣｏｍｍｏｎ  Ｇｒａｐｈｉｃｓにおける（ｍａｋｅ−ｉｎｓｔａｎｃｅ  ’Ａ）と同義である。例えば、ｍａｋｅ−ｉｎｓｔａｎｃｅ（ｂｕｔｔｏｎ）は、ボタンクラスのインスタンスであるウィジェットを生成する。
【００２１】
・評価関数ｔｉｔｌｅ：引数としてウィジェットをとり、そのウィジェットのタイトル属性を表す文字列を返す。ｔｉｔｌｅ（Ａ，Ｂ）は、Ａｌｌｅｇｒｏ  Ｃｏｍｍｏｎ  ＬｉｓｐのＣｏｍｍｏｎ  Ｇｒａｐｈｉｃｓの（ｔｉｔｌｅ  Ａ  ’Ｂ）と同義である。例えば、ｔｉｔｌｅ（ｗｉｄｇｅｔ）はウィジェットｗｉｄｇｅｔのタイトル属性を返す。
・評価関数ｂａｃｋｇｒｏｕｎｄ：引数としてウィジェットをとり、そのウィジェットの背景色属性を表すデータを返す。ｂａｃｋｇｒｏｕｎｄ（Ａ，Ｂ）は、Ａｌｌｅｇｒｏ  Ｃｏｍｍｏｎ  ＬｉｓｐのＣｏｍｍｏｎ  Ｇｒａｐｈｉｃｓの（ｂａｃｋｇｒｏｕｎｄ−ｃｏｌｏｒ  Ａ  ’Ｂ）と同義である。例えば、ｂａｃｋｇｒｏｕｎｄ（ｗｉｄｇｅｔ）はウィジェットｗｉｄｇｅｔの背景色属性を返す。
【００２２】
・評価関数ｓｅｔ−ｄａｔａ：引数として、ウィジェットの属性を読み出す関数名ＡとウィジェットＢとデータＣをとり、ＢのＡで表される属性をＣに更新し、Ｃを返す。ｓｅｔ−ｄａｔａ（Ａ，Ｂ，Ｃ）は、Ａｌｌｅｇｒｏ  Ｃｏｍｍｏｎ  ＬｉｓｐのＣｏｍｍｏｎ  Ｇｒａｐｈｉｃｓにおける（ｓｅｔｆ（Ａ  Ｂ）  ’Ｃ）と同義である。例えば、ｓｅｔ−ｄａｔａ（ｔｉｔｌｅ，ｗｉｄｇｅｔ，“Ｓｔａｒｔ”）は、ウィジェットｗｉｄｇｅｔのタイトル属性を“Ｓｔａｒｔ”に変更し、“Ｓｔａｒｔ”を返す。
【００２３】
・評価関数ｓｅｔ−ｅｖｅｎｔ：引数としてイベントの名前ＡとウィジェットＢと評価関数の名前Ｃをとり、ウィジェットＢでイベントＡが起こったときに呼び出す評価関数の名前をＣに更新し、Ｃを返す。ｓｅｔ−ｅｖｅｎｔ（Ａ，Ｂ，Ｃ）は、Ａｌｌｅｇｒｏ  Ｃｏｍｍｏｎ  ＬｉｓｐのＣｏｍｍｏｎ  Ｇｒａｐｈｉｃｓにおける（ｓｅｔｆ（Ａ  Ｂ）  ’Ｃ）と同義である。例えば、ｓｅｔ−ｅｖｅｎｔ（ｏｎ−ｃｌｉｃｋ，ｗｉｄｇｅｔ，ｈａｎｄｌｅ−ｅｖｅｎｔ）は、ウィジェットｂｕｔｔｏｎ描画領域でマウスクリックイベントが起こったときに呼び出される評価関数の名前をｈａｎｄｌｅ−ｅｖｅｎｔに変更する。
・評価関数ｃｌｏｓｅ：入力としてウィジェットをとり、そのウィジェットをクローズする。例えば、ｃｌｏｓｅ（ｗｉｄｇｅｔ）はウィジェットｗｉｄｇｅｔをクローズする。
【００２４】
リクエスト送信部３１は、プログラムコード実行部４１およびイベント評価関数部４４から送信リクエストまたは受信リクエストを受け、これらのリクエストの内容を内部の記憶領域（図示せず）に一旦格納し、格納したリクエストをネットワーク１を介してタプル空間２に転送する。
結果受信部３２は、タプル空間２から送信完了メッセージまたは受信メッセージを受信し、これらのメッセージの内容を内部の記憶領域（図示せず）に一旦格納し、格納したメッセージをプログラムコード実行部４１に転送する。
【００２５】
新規チャネル生成部３３は、内部変数に整数を格納しており、ウィジェットテーブル部３４からリクエストを受けると、格納している整数を新規チャネルを表すチャネル識別子としてウィジェットテーブル部３４に返す。このとき、内部変数に格納している整数の値を１だけ増加し、内部変数に再格納する。したがって、次にリクエストを受けたときには、前回よりも１だけ大きい整数がチャネル識別子として返される。プログラムコード実行部４１からリクエストを受けたときも同様に動作し、チャネル識別子をプログラムコード実行部４１に返す。
【００２６】
ウィジェットテーブル部３４は、内部変数ｗｉｄｇｅｔＴａｂｌｅを持つ。変数ｗｉｄｇｅｔＴａｂｌｅには、チャネル識別子とウィジェットとを対応付けた組「（チャネル識別子  ウィジェット）」のリストが格納される。また、ウィジェットテーブル部３４は、値を一時保存するための内部変数ｒ，ｃおよびｔを持つ。
【００２７】
ウィジェットテーブル部３４は、以下の手順で動作する。図３は、ウィジェットテーブル部３４の動作の流れを示すフローチャートである。
ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待ち、リクエストを受信したときに（ステップＳ１，ＹＥＳ）、受信したリクエストを変数ｒに格納する（ステップＳ２）。
評価関数１ｓｔ（ｒ）を評価し、評価結果を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果を変数ｒに格納し直す（ステップＳ４）。
【００２８】
ここで、変数ｃを評価する（ステップＳ５）。その結果、変数ｃが“ｓｅａｒｃｈ”である場合には（ステップＳ６，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果を変数ｒに格納し直す（ステップＳ７）。そして、変数ｒに格納された評価結果をリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ８）、ステップＳ１に戻る。これにより、プログラムコード実行部４１からのリクエストに応じて、チャネル識別子ｒに対応する組が自装置内に存在するか否かを検索し、存在する場合にはその組をプログラムコード実行部４１に返すことができる。
【００２９】
また、ステップＳ５において、変数ｃを評価した結果、変数ｃが“ａｄｄ”である場合には（ステップＳ９，ＹＥＳ）、新規チャネル生成部３３を呼び出して、新規チャネル生成部３３からチャネル識別子を受け取り、この識別子の値を変数ｔに格納する（ステップＳ１０）。そして、変数ｗｉｄｇｅｔＴａｂｌｅに組「（ｔ  ｒ）」を新たに加える（ステップＳ１１）。さらに、変数ｔをリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ１２）、ステップＳ１に戻る。
【００３０】
さらにまた、ステップＳ５において、変数ｃを評価した結果、変数ｃが“ｃｌｏｓｅ”である場合には（ステップＳ１３，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果を変数ｒに格納し直す（ステップＳ１４）。そして、変数ｒと同一内容の組を変数ｗｉｄｇｅｔＴａｂｌｅから削除して、変数ｗｉｄｇｅｔＴａｂｌｅに格納し直し（ステップＳ１５）、ステップＳ１に戻る。これにより、ウィジェットのクローズ時にこのウィジェットに対応する組を変数ｗｉｄｇｅｔＴａｂｌｅから削除することができる。
【００３１】
以下、実行部３５について説明する。
イベントテーブル４２は、二重に入れ子したリスト「（（イベントの種類  ウィジェット）  チャネル識別子）」を格納する変数ｅｖｅｎｔＴａｂｌｅである。初期値は空リスト（）である。よって、イベントテーブル４２は、イベントの種類とウィジェットとの組から、その組に対応するチャネル識別子ヘの対応を保持する。
【００３２】
次に、イベント評価関数部４４は、ウィジェットの描画領域上で発生したイベントの検出時に呼び出される評価関数の引数をタプル空間２に送信する。このようなイベント評価関数部４４が、個々のイベントに１対１に対応して、複数存在する。本実施の形態では、イベント評価関数部４４−１が、イベントｏｎ−ｃｌｉｃｋに対応し、ｆ−ｏｎ−ｃｌｉｃｋという名前を持つ。また、イベント評価関数部４４−２が、イベントｏｎ−ｄｏｕｂｌｅ−ｃｌｉｃｋに対応し、ｆ−ｏｎ−ｄｏｕｂｌｅ−ｃｌｉｃｋという名前を持つ。
【００３３】
評価関数ｓｅｔ−ｅｖｅｎｔ（Ａ，Ｂ，ｆ−Ａ）の評価により、ウィジェットＢでイベントＡが起こったとき呼び出される評価関数の名前がｆ−Ａと設定されている場合には、ウィンドウシステム３６は、ウィジェットＢでイベントＡが起こったときに、ウィジェットＢとイベントＡの内容を表すデータｄを引数として、イベント評価関数部ｆ−Ａを呼び出す。このとき、イベントＡに対応するイベント評価関数部ｆ−Ａは、以下の手順で動作する。なお、個々のイベント評価関数部４４は、引数であるウィジェットおよびデータをそれぞれ格納する内部変数として、ｗｉｄＴＥＭＰおよびｄａｔａを持つ。また、値を一時保存するために、内部変数ｖａｌ，ａｄｒｓ，ａｃｋを持つ。
【００３４】
図４は、イベント評価関数部ｆ−Ａの動作の流れを示すフローチャートである。
イベント評価関数部ｆ−Ａの変数ｗｉｄＴＥＭＰには、引数であるウィジェットが格納され、変数ｄａｔａには、引数であるイベントＡの内容を表すデータｄが格納されている。
イベント評価関数部ｆ−Ａは、評価関数ａｓｓｏｃ（ｌｉｓｔ２（Ａ，ｗｉｄＴＥＭＰ），ｅｖｅｎｔＴａｂｌｅ）を評価し、評価結果を変数ｖａｌに格納する（ステップＳ２１）。さらに、評価関数２ｎｄ（ｖａｌ）を評価し、評価結果を変数ａｄｒｓに格納する（ステップＳ２２）。
【００３５】
続いて、リクエスト送信部３１に送信リクエスト（ｓｅｎｄ，ａｄｒｓ，ｄａｔａ）を送ることにより（ステップＳ２３）、タプル空間２にイベントの検出時に呼び出される評価関数の引数を送る。そして、タプル空間２からの送信完了メッセージが結果受信部３２を介して送り返されるまで待つ。送信完了メッセージを受けると（ステップＳ２４，ＹＥＳ）、返り値としてＮＵＬＬを返し（ステップＳ２５）、処理を終了する。
【００３６】
次に、評価関数名対応表４３は、組「（イベント名  イベント評価関数名）」を格納する内部変数ｔａｉｏｕＴａｂｌｅである。すなわち、評価関数名対応表４３は、イベント名と、そのイベントが発生したときに定められたチャネルヘの送信を行うイベント評価関数の名前（例えば、ｏｎ−ｃｌｉｃｋとｆ−ｏｎ−ｃｌｉｃｋ、ｏｎ−ｄｏｕｂｌｅ−ｃｌｉｃｋとｆ−ｏｎ−ｄｏｕｂｌｅ−ｃｌｉｃｋなど）との対応表である。初期値は、イベント名とそれに対応するイベント評価関数名の組の全てをリストにしたものである。
【００３７】
次に、プログラムコード実行部４１は複数存在し、それぞれのプログラムコード実行部４１−１，４１−２，…に格納されたプログラムコードを独立に実行する。
プログラムコード実行部４１は内部変数ｐを持ち、この内部変数ｐには、プログラムコード受信用のチャネル識別子、プログラムコード、プログラムコードから呼び出されるプロセス定義式が格納される。プログラムコード実行部４１はまた、命令や値を一時保存するための変数ｃｏｍ，ａｄｒｓ，ｖａｒ，ｖａｌ，ｖａｌ１，ｖａｌ２，ｖａｌ３，ｎｅｘｔ，ｔｍｐＷＤを持つ。
【００３８】
ここで、変数ｃｏｍはプログラムコードから取り出した命令を格納するための変数、変数ａｄｒｓはチャネル識別子を格納するための変数、変数ｖａｒは後続処理に含まれる置き換えの対象となる変数を格納するための変数、変数ｖａｌ，ｖａｌ１，ｖａｌ２，ｖａｌ３はタプル空間２に送信するデータまたはタプル空間２から受信したデータを格納するための変数、変数ｎｅｘｔは後続処理を表すコードを格納するための変数、変数ｔｍｐＷＤはウィジェットテーブル部３４から受信した結果を格納するための変数である。
【００３９】
プログラムコードは、以下のリストとする。
Ｐ:＝（ｅｎｄ）
｜（！  ｃｈａｎ  ｄａｔａ  Ｐ）
｜（？  ｃｈａｎ  ｖａｒ  Ｐ）
｜（？ｇ  ｃｌａｓｓ  ｗｉｄｇｅｔ＿ｃｈａｎ  Ｐ）
｜（！ｇ  ｃｌｏｓｅ  ｗｉｄｇｅｔ＿ｃｈａｎ  Ｐ）
【００４０】
このリストにおいて、プログラムコード（ｅｎｄ）は、終了動作を意味する。プログラムコード（！  ｃｈａｎ  ｄａｔａ  Ｐ）は、チャネルの生成機能を持つタプル空間型通信システムを用いた送信動作、すなわちチャネルｃｈａｎにデータｄａｔａを送信し、後続処理Ｐを実行する送信動作を意味する。プログラムコード（？  ｃｈａｎ  ｖａｒ  Ｐ）は、チャネルの生成機能を持つタプル空間型通信システムを用いた受信動作、すなわちチャネルｃｈａｎからデータを受信し、後続処理Ｐに含まれる変数ｖａｒをそのデータで置き換えて実行する受信動作を意味する。プログラムコード（？ｇ  ｃｌａｓｓ  ｗｉｄｇｅｔ＿ｃｈａｎ  Ｐ）は、ウィジェットの生成動作を意味する。プログラムコード（！ｇ  ｃｌｏｓｅ  ｗｉｄｇｅｔ＿ｃｈａｎ  Ｐ）は、ウィジェットのクローズ動作を意味する。
【００４１】
ただし、プログラムコード（！  ｃｈａｎ  ｄａｔａ  Ｐ）については、チャネルｃｈａｎがウィジェットテーブル部３４に登録されているとき、すなわち（ｃｈａｎ  ｗｉｄｇｅｔ）という組がウィジェットテーブル部３４の内部変数ｗｉｄｇｅｔＴａｂｌｅにあるときには、データｄａｔａは長さ３のリスト形式で以下のもののみを許す。
（ｒｅａｄ  Ａ  ｒｅｔ＿ｃｈ）
（ｗｒｉｔｅ  Ａ  Ｂ）
（ｅｖｅｎｔ  Ａ  ｒｅｔ＿ｃｈ）
ここで、データ（ｒｅａｄ  Ａ  ｒｅｔ＿ｃｈ）は、属性Ａの値をチャネルｒｅｔ＿ｃｈに送信する動作を意味する。データ（ｗｒｉｔｅ  Ａ  Ｂ）は、属性Ａの値をＢの値に更新する動作を意味する。データ（ｅｖｅｎｔ  Ａ  ｒｅｔ＿ｃｈ）は、イベントＡの発生をチャネルｒｅｔ＿ｃｈに送信するように登録する動作を意味する。
【００４２】
プログラムコードの一例を示す。
（？ｇ  ｂｕｔｔｏｎ  ｇ＿ｃｈａｎ  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”）  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ｇ＿ｃｈａｎ  （ｅｎｄ）））））））））
【００４３】
プログラムコード実行部４１は、以下の手順で動作する。図５は、プログラムコード実行部４１の動作の流れを示すフローチャートである。
前述のように、変数ｐにはプログラムコードが格納されている。この変数ｐを評価し、評価結果を変数ｖａｌに格納する（ステップＳ３１）。変数ｖａｌを評価し、変数ｖａｌの内容がＮＵＬＬ（すなわち、空）の場合には（ステップＳ３２，ＹＥＳ）、処理を終了する。
これに対し、変数ｖａｌの内容がＮＵＬＬでない場合には（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果を変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。
【００４４】
ここで、変数ｃｏｍを評価し（ステップＳ３５）、変数ｃｏｍの内容に応じて、次のような処理を行う。まず、変数ｃｏｍがｅｎｄである場合には（ステップＳ３６，ＹＥＳ）、終了処理を行い（ステップＳ３７）、ステップＳ３１に戻る。また、変数ｃｏｍが！である場合には（ステップＳ３８，ＹＥＳ）、タプル空間２への送信処理を行い（ステップＳ３９）、ステップＳ３１に戻る。また、変数ｃｏｍが？である場合には（ステップＳ４０，ＹＥＳ）、タプル空間２からの受信処理を行い（ステップＳ４１）、ステップＳ３１に戻る。また、変数ｃｏｍが？ｇである場合には（ステップＳ４２，ＹＥＳ）、ウィジェットの生成処理を行い（ステップＳ４３）、ステップＳ３１に戻る。また、変数ｃｏｍが！ｇである場合には（ステップＳ４４，ＹＥＳ）、ウィジェットのクローズ処理を行い（ステップＳ４５）、ステップＳ３１に戻る。
【００４５】
以下、プログラムコード実行部４１による変数ｃｏｍの内容に応じた処理についてさらに説明する。
まず、図５のステップＳ３７における終了処理について説明する。図６は、終了処理の流れを示すフローチャートである。終了処理では、変数ｐ，ｃｏｍ，ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納し（ステップＳ５１）、図５のステップＳ３１に戻る。
【００４６】
次に、図５のステップＳ３９におけるタプル空間２への送信処理について説明する。図７および図８は、タプル空間２への送信処理の流れを示すフローチャートである。
タプル空間２への送信処理では、まず、評価関数２ｎｄ（ｐ），３ｒｄ（ｐ）を評価し、評価結果をそれぞれ変数ａｄｒｓ，ｖａｌに格納する（ステップＳ６１）。また、評価関数４ｔｈ（ｐ）を評価し、評価結果を変数ｐに格納し直す（ステップＳ６２）。
続いて、ウィジェットテーブル部３４にリクエスト「（“ｓｅａｒｃｈ”  ａｄｒｓ）」を送り（ステップＳ６３）、チャネル識別子ａｄｒｓに対応するファイルが自装置内に存在するか否かをウィジェットテーブル部３４に問い合わせる。ウィジェットテーブル部３４から結果が送り返されるまで待ち（ステップＳ６４）、結果を受信すると、その結果を変数ｔｍｐＷＤに格納する（ステップＳ６５）。
【００４７】
変数ｔｍｐＷＤを評価し、評価結果がＮＵＬＬの場合、すなわちチャネル識別子ａｄｒｓのチャネルに対応するファイルが自装置内に存在しない場合には（ステップＳ６６，ＹＥＳ）、リクエスト送信部３１に送信リクエスト（ｓｅｎｄ，ａｄｒｓ，ｖａｌ）を送ることにより（ステップＳ６７）、変数ｖａｌをタプル空間２に送る。そして、タプル空間２からの送信完了メッセージが結果受信部３２を介して送り返されるのを待って（ステップＳ６８，ＹＥＳ）、図５のステップＳ３１に戻る。
【００４８】
これに対し、チャネル識別子ａｄｒｓのチャネルに対応するファイルが自装置内に存在し、変数ｔｍｐＷＤの評価結果がＮＵＬＬではなく、チャネル識別子とウィジェットとの組「（ａｄｒｓ  ｗｉｄｇｅｔ）」の場合には（ステップＳ６６，ＮＯ）、評価関数２ｎｄ（ｔｍｐＷＤ）を評価し、評価結果（ｗｉｄｇｅｔ）を変数ｔｍｐＷＤに格納し直す（ステップＳ６９）。また、評価関数１ｓｔ（ｖａｌ），２ｎｄ（ｖａｌ），３ｒｄ（ｖａｌ）を評価し、評価結果をそれぞれ変数ｖａｌ１，ｖａｌ２，ｖａｌ３に格納する。（ステップＳ７０）。
【００４９】
ここで、変数ｖａｌ１を評価し（ステップＳ７１）、変数ｖａｌ１の内容に応じた処理を行う。まず、変数ｖａｌ１がｒｅａｄである場合には（ステップＳ７２，ＹＥＳ）、評価関数ａｐｐｌｙ（ｖａｌ２，ｔｍｐＷＤ）を評価し、評価結果すなわちウィジェットｗｉｄｇｅｔの属性ｖａｌ２の値を変数ｖａｌに格納し直す（ステップＳ７３）。さらに、リクエスト送信部３１に送信リクエスト（ｓｅｎｄ，ｖａｌ３，ｖａｌ）を送ることにより（ステップＳ７４）、変数ｖａｌ（ウィジェットｗｉｄｇｅｔの属性ｖａｌ２の値）をタプル空間２に送る。そして、タプル空間２からの送信完了メッセージが結果受信部３２を介して送り返されるのを待って（ステップＳ７５，ＹＥＳ）、図５のステップＳ３１に戻る。
【００５０】
次に、変数ｖａｌ１がｗｒｉｔｅである場合には（ステップＳ７６，ＹＥＳ）、評価関数ｓｅｔ−ｄａｔａ（ｖａｌ２，ｔｍｐＷＤ，ｖａｌ３）を評価し、ウィジェットｗｉｄｇｅｔの属性ｖａｌ２の値を変数ｖａｌ３に更新し（ステップＳ７７）、図５のステップＳ３１に戻る。
【００５１】
次に、変数ｖａｌ１がそれ以外の場合には（ステップＳ７２，ＮＯかつステップＳ７６，ＮＯ）、評価関数ｃｏｎｓ（ｌｉｓｔ２（ｌｉｓｔ２（ｖａｌ２，ｔｍｐＷＤ），ｖａｌ３），ｅｖｅｎｔＴａｂｌｅ）を評価し、評価結果を変数ｅｖｅｎｔＴａｂｌｅに格納し直す（ステップＳ７８）。これにより、イベントの種類であるｖａｌ２の評価値（ｅｖと書く）とウィジェットｗｉｄｇｅｔとの組（ｅｖ  ｗｉｄｇｅｔ）からチャネルｖａｌ３への対応がイベントテーブルに保持される。続いて、評価関数ａｓｓｏｃ（ｖａｌ２，ｔａｉｏｕＴａｂｌｅ）を評価し、評価結果を変数ｖａｌ３に格納し直す（ステップＳ７９）。そして、評価関数２ｎｄ（ｖａｌ３）を評価し、評価結果を変数ｖａｌ３に格納し直す（ステップＳ８０）。さらに、評価関数ｓｅｔ−ｅｖｅｎｔ（ｖａｌ２，ｔｍｐＷＤ，ｖａｌ３）を評価する（ステップＳ８１）。これにより、ウィジェットｔｍｐＷＤでイベントｖａｌ２が起こったときに呼び出される評価関数の名前が、ｖａｌ３に更新される。最後に、図５のステップＳ３１に戻る。
【００５２】
次に、図５のステップＳ４１におけるタプル空間２からの受信処理について説明する。図９は、タプル空間２からの受信処理の流れを示すフローチャートである。
タプル空間２からの受信処理では、まず、評価関数２ｎｄ（ｐ），３ｒｄ（ｐ）および４ｔｈ（ｐ）を評価し、評価結果をそれぞれ変数ａｄｒｓ，ｖａｒおよびｎｅｘｔに格納する（ステップＳ９１）。続いて、リクエスト送信部３１を介してタプル空間２に受信リクエスト（ｒｅｃｅｉｖｅ，ａｄｒｓ）を送る（ステップＳ９２）。そして、タプル空間２からの受信メッセージが結果受信部３２を介して送り返されるまで待つ。受信メッセージを受けると（ステップＳ９３，ＹＥＳ）、この受信メッセージの値ｘを変数ｖａｌに格納する（ステップＳ９４）。評価関数ｓｕｂｓｔｉｔｕｔｅ（ｖａｌ，ｖａｒ，ｎｅｘｔ）を評価し、評価結果を変数ｐに格納して（ステップＳ９５）、図５のステップＳ３１に戻る。
【００５３】
次に、図５のステップＳ４３におけるウィジェットの生成処理について説明する。図１０は、ウィジェットの生成処理の流れを示すフローチャートである。
ウィジェットの生成処理では、まず、評価関数２ｎｄ（ｐ），３ｒｄ（ｐ），４ｔｈ（ｐ）を評価し、評価結果をそれぞれ変数ｔｍｐＷＤ，ｖａｒ，ｎｅｘｔに格納する（ステップＳ１０１）。評価関数ｍａｋｅ−ｉｎｓｔａｎｃｅ（ｔｍｐＷＤ）を実行してウィジェットを生成し、その返値を変数ｔｍｐＷＤに格納し直す（ステップＳ１０２）。
【００５４】
続いて、ウィジェットテーブル部３４にリクエスト「（“ａｄｄ”  ｔｍｐＷＤ）」を送り（ステップＳ１０３）、新規チャネルの生成をウィジェットテーブル部３４に要求し、ウィジェットテーブル部３４から返答が送り返されるまで待つ。返答を受信すると（ステップＳ１０４，ＹＥＳ）、この返答にある新規チャネルの識別子の値ｔを変数ｖａｌに格納し直す（ステップＳ１０５）。さらに、評価関数ｓｕｂｓｔｉｔｕｔｅ（ｖａｌ，ｖａｒ，ｎｅｘｔ）を評価し、評価結果を変数ｐに格納し直して（ステップＳ１０６）、図５のステップＳ３１に戻る。
【００５５】
次に、図５のステップＳ４５におけるウィジェットのクローズ処理について説明する。図１１は、ウィジェットのクローズ処理の流れを示すフローチャートである。
ウィジェットのクローズ処理では、まず、評価関数３ｒｄ（ｐ），４ｔｈ（ｐ）を評価し、評価結果を変数ａｄｒｓ，ｐに格納する（ステップＳ１１１）。続いて、ウィジェットテーブル部３４にリクエスト「（“ｓｅａｒｃｈ”  ａｄｒｓ）」を送り（ステップＳ１１２）、リクエストに対する結果がウィジェットテーブル部３４から送り返されるまで待つ。結果を受信すると（ステップＳ１１３，ＹＥＳ）、その結果を変数ｔｍｐＷＤに格納する（ステップＳ１１４）。
続いて、ウィジェットテーブル部３４にリクエスト「（“ｃｌｏｓｅ”  ａｄｒｓ）」を送る（ステップＳ１１５）。また、評価関数ｃｌｏｓｅ（ｔｍｐＷＤ）を実行し（ステップＳ１１６）、図５のステップＳ３１に戻る。
【００５６】
次に、ホスト装置３の各部の実行手順を、具体例により詳細に説明する。プログラムコード実行部４１の内部変数ｐに、新規プログラムコード（？ｇ  ｂｕｔｔｏｎ  ｇ＿ｃｈａｎ  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”）  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ｇ＿ｃｈａｎ  （ｅｎｄ）））））））））を与えたとする。
【００５７】
このとき、プログラムコード実行部４１は、まず、変数ｐを評価し、評価結果（？ｇ  ｂｕｔｔｏｎ  ｇ＿ｃｈａｎ  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”）  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ｇ＿ｃｈａｎ  （ｅｎｄ）））））））））を変数ｖａｌに格納する（図５のステップＳ３１）。
【００５８】
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果？ｇを変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が？ｇであるので（ステップＳ４２，ＹＥＳ）、ウィジェットの生成処理を行う（ステップＳ４３）。
【００５９】
具体的には、まず、評価関数２ｎｄ（ｐ），３ｒｄ（ｐ），４ｔｈ（ｐ）を評価し、評価結果ｂｕｔｔｏｎ，ｇ＿ｃｈａｎおよび（！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”）  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ｇ＿ｃｈａｎ  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ｇ＿ｃｈａｎ  （ｅｎｄ））））））））をそれぞれ変数ｔｍｐＷＤ，ｖａｒおよびｎｅｘｔに格納する（図１０のステップＳ１０１）。
【００６０】
次に、評価関数ｍａｋｅ−ｉｎｓｔａｎｃｅ（ｔｍｐＷＤ）を実行してクラスｂｕｔｔｏｎのウィジェットを生成し、ｍａｋｅ−ｉｎｓｔａｎｃｅ関数の返値（ｗｉｄと書く）を変数ｔｍｐＷＤに格納し直す（ステップＳ１０２）。続いて、ウィジェットテーブル部３４にリクエスト「（“ａｄｄ”  ｗｉｄ）」を送り（ステップＳ１０３）、新規チャネルの生成をウィジェットテーブル部３４に要求し、ウィジェットテーブル部３４から返答が送り返されるまで待つ。
【００６１】
このとき、ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待っており（図３のステップＳ１）、受信したリクエスト「（“ａｄｄ”  ｗｉｄ）」を変数ｒに格納する（ステップＳ２）。そして、評価関数１ｓｔ（ｒ）を評価し、評価結果“ａｄｄ”を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果ｗｉｄを変数ｒに格納し直す（ステップＳ４）。変数ｃを評価すると（ステップＳ５）、変数ｃの内容が“ａｄｄ”であるので（ステップＳ９，ＹＥＳ）、新規チャネル生成部３３を呼び出す。
【００６２】
この呼び出しに応じて、新規チャネル生成部３３は、新規チャネルを生成し、この新規チャネルを表すチャネル識別子（ここでは、０）をウィジェットテーブル部３４に返す。
ウィジェットテーブル部３４は、新規チャネル生成部３３からチャネル識別子を受け取り、この識別子の値０を変数ｔに格納する（ステップＳ１０）。そして、変数ｗｉｄｇｅｔＴａｂｌｅに組「（０  ｗｉｄ）」を新たに加える（ステップＳ１１）。さらに、値０をリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ１２）、ステップＳ１に戻る。
【００６３】
プログラムコード実行部４１は、ウィジェットテーブル部３４から返答を受信すると（図１０のステップＳ１０４，ＹＥＳ）、この返答の値０を変数ｖａｌに格納し直す（ステップＳ１０５）。そして、評価関数ｓｕｂｓｔｉｔｕｔｅ（ｖａｌ，ｖａｒ，ｎｅｘｔ）を評価し、評価結果（！  ０  ｌｉｓｔ３（ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”）  （！  ０  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））））））））を変数ｐに格納し直す（ステップＳ１０６）。これによりウィジェットの生成処理を終了し、図５のステップＳ３１に戻る。
【００６４】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（！  ０  ｌｉｓｔ３（ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”）  （！  ０  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））））））））を変数ｖａｌに格納する（図５のステップＳ３１）。
【００６５】
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果！を変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が！であるので（ステップＳ３８，ＹＥＳ）、タプル空間２への送信処理を行う（ステップＳ３９）。
【００６６】
具体的には、まず、評価関数２ｎｄ（ｐ）および３ｒｄ（ｐ）を評価し、評価結果０および（ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”）をそれぞれ変数ａｄｒｓおよびｖａｌに格納する（図７のステップＳ６１）。また、評価関数４ｔｈ（ｐ）を評価し、評価結果（！  ０  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））））））を変数ｐに格納し直す（ステップＳ６２）。
続いて、ウィジェットテーブル部３４にリクエスト「（“ｓｅａｒｃｈ”  ０）」を送り（ステップＳ６３）、チャネル識別子０に対応するファイルが自装置内に存在するか否かをウィジェットテーブル部３４に問い合わせ、ウィジェットテーブル部３４から結果が送り返されるまで待つ。
【００６７】
このとき、ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待っており（図３のステップＳ１）、受信したリクエスト「（“ｓｅａｒｃｈ”  ０）」を変数ｒに格納する（ステップＳ２）。そして、評価関数１ｓｔ（ｒ）を評価し、評価結果“ｓｅａｒｃｈ”を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果０を変数ｒに格納し直す（ステップＳ４）。変数ｃを評価すると（ステップＳ５）、変数ｃの内容が“ｓｅａｒｃｈ”であるので（ステップＳ６，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果（０，ｗｉｄ）を変数ｒに格納し直す（ステップＳ７）。そして、変数ｒに格納された評価結果（０，ｗｉｄ）をリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ８）、ステップＳ１に戻る。
【００６８】
プログラムコード実行部４１は、ウィジェットテーブル部３４から結果を受信すると（図７のステップＳ６４）、その結果（０，ｗｉｄ）を変数ｔｍｐＷＤに格納する（ステップＳ６５）。変数ｔｍｐＷＤを評価すると、評価結果がチャネル識別子とウィジェットとの組（０  ｗｉｄ）であるので（ステップＳ６６，ＮＯ）、評価関数２ｎｄ（ｔｍｐＷＤ）を評価し、評価結果ｗｉｄを変数ｔｍｐＷＤに格納し直す（ステップＳ６９）。また、評価関数１ｓｔ（ｖａｌ），２ｎｄ（ｖａｌ），３ｒｄ（ｖａｌ）を評価し、それぞれの値ｗｒｉｔｅ，ｔｉｔｌｅ，“ｍｙｂｕｔｔｏｎ”を変数ｖａｌ１，ｖａｌ２，ｖａｌ３に格納する。（ステップＳ７０）。
【００６９】
変数ｖａｌ１を評価すると（ステップＳ７１）、変数ｖａｌ１がｗｒｉｔｅであるので（図８のステップＳ７６，ＹＥＳ）、評価関数ｓｅｔ−ｄａｔａ（ｖａｌ２，ｔｍｐＷＤ，ｖａｌ３）を評価し、ウィジェットｗｉｄの属性ｔｉｔｌｅの値を“ｍｙｂｕｔｔｏｎ”に更新する（ステップＳ７７）。これにより、タプル空間２への送信処理を終了し、図５のステップＳ３１に戻る。
【００７０】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（！  ０  ｌｉｓｔ２（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）  （？  １０  ｄａｔａ１  （！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））））））を変数ｖａｌに格納する（図５のステップＳ３１）。
【００７１】
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果！を変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が！であるので（ステップＳ３８，ＹＥＳ）、タプル空間２への送信処理を行う（ステップＳ３９）。
【００７２】
具体的には、まず、評価関数２ｎｄ（ｐ）および３ｒｄ（ｐ）を評価し、評価結果０および（ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０）をそれぞれ変数ａｄｒｓおよびｖａｌに格納する（図７のステップＳ６１）。また、評価関数４ｔｈ（ｐ）を評価し、評価結果（？  １０  ｄａｔａ１  （！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））））））を変数ｐに格納し直す（ステップＳ６２）。
続いて、ウィジェットテーブル部３４にリクエスト「（“ｓｅａｒｃｈ”  ０）」を送り（ステップＳ６３）、チャネル識別子０に対応するファイルが自装置内に存在するか否かをウィジェットテーブル部３４に問い合わせ、ウィジェットテーブル部３４から結果が送り返されるまで待つ。
【００７３】
このとき、ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待っており（図３のステップＳ１）、受信したリクエスト「（“ｓｅａｒｃｈ”  ０）」を変数ｒに格納する（ステップＳ２）。そして、評価関数１ｓｔ（ｒ）を評価し、評価結果“ｓｅａｒｃｈ”を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果０を変数ｒに格納し直す（ステップＳ４）。変数ｃを評価すると（ステップＳ５）、変数ｃの内容が“ｓｅａｒｃｈ”であるので（ステップＳ６，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果（０，ｗｉｄ）を変数ｒに格納し直す（ステップＳ７）。そして、変数ｒに格納された評価結果（０，ｗｉｄ）をリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ８）、ステップＳ１に戻る。
【００７４】
プログラムコード実行部４１は、ウィジェットテーブル部３４から結果を受信すると（図７のステップＳ６４）、その結果（０，ｗｉｄ）を変数ｔｍｐＷＤに格納する（ステップＳ６５）。変数ｔｍｐＷＤを評価すると、評価結果がチャネル識別子とウィジェットとの組（０  ｗｉｄ）であるので（ステップＳ６６，ＮＯ）、評価関数２ｎｄ（ｔｍｐＷＤ）を評価し、評価結果ｗｉｄを変数ｔｍｐＷＤに格納し直す（ステップＳ６９）。また、評価関数１ｓｔ（ｖａｌ），２ｎｄ（ｖａｌ），３ｒｄ（ｖａｌ）を評価し、それぞれの値ｒｅａｄ，ｂａｃｋｇｒｏｕｎｄ，１０を変数ｖａｌ１，ｖａｌ２，ｖａｌ３に格納する。（ステップＳ７０）。
【００７５】
変数ｖａｌ１を評価すると（ステップＳ７１）、変数ｖａｌ１がｒｅａｄであるので（図８のステップＳ７２，ＹＥＳ）、評価関数ａｐｐｌｙ（ｖａｌ２，ｔｍｐＷＤ）を評価し、評価結果の値（ｗｉｄの背景色属性；ｃｏｌｏｒと書く）を変数ｖａｌに格納し直す（ステップＳ７３）。さらに、リクエスト送信部３１に送信リクエスト（ｓｅｎｄ，１０，ｃｏｌｏｒ）を送ることにより（ステップＳ７４）、ｃｏｌｏｒをタプル空間２に送る。そして、送信完了メッセージが送り返されるのを待つ。
【００７６】
タプル空間２は、受信した送信リクエスト（ｓｅｎｄ，１０，ｃｏｌｏｒ）と同じチャネル識別子１０を持つ受信リクエスト（ｒｅｃｅｉｖｅ，１０）がタプル空間２内に存在するかどうかを調べる。存在する場合には、送信リクエスト（ｓｅｎｄ，１０，ｃｏｌｏｒ）の送信元ホスト装置３に送信完了メッセージを送り、受信リクエスト（ｒｅｃｅｉｖｅ，１０）の送信元ホスト装置３に受信メッセージｃｏｌｏｒを送る。
プログラムコード実行部４１は、タプル空間２からの送信完了メッセージを結果受信部３２を介して受信すると（ステップＳ７５，ＹＥＳ）、タプル空間２への送信処理を終了し、図５のステップＳ３１に戻る。
【００７７】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（？  １０  ｄａｔａ１  （！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））））））を変数ｖａｌに格納する（図５のステップＳ３１）。
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果？を変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が？であるので（ステップＳ４０，ＹＥＳ）、タプル空間２からの受信処理を行う（ステップＳ４１）。
【００７８】
具体的には、まず、評価関数２ｎｄ（ｐ），３ｒｄ（ｐ）および４ｔｈ（ｐ）を評価し、評価結果１０，ｄａｔａ１および（！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｄａｔａ１  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））））をそれぞれ変数ａｄｒｓ，ｖａｒおよびｎｅｘｔに格納する（ステップＳ９１）。続いて、リクエスト送信部３１を介してタプル空間２に受信リクエスト（ｒｅｃｅｉｖｅ，１０）を送る（ステップＳ９２）。そして、受信メッセージが送り返されるのを待つ。
【００７９】
タプル空間２は、受信した受信リクエスト（ｒｅｃｅｉｖｅ，１０）と同じチャネル識別子１０を持つ送信リクエスト（ｓｅｎｄ，１０，ｃｏｌｏｒ）がタプル空間２内に存在するかどうかを調べる。存在する場合には、送信リクエスト（ｓｅｎｄ，１０，ｃｏｌｏｒ）の送信元ホスト装置３に送信完了メッセージを送り、受信リクエスト（ｒｅｃｅｉｖｅ，１０）の送信元ホスト装置３に受信メッセージｃｏｌｏｒを送る。
【００８０】
プログラムコード実行部４１は、タプル空間２からの受信メッセージｃｏｌｏｒを結果受信部３２を介して受信すると（図９のステップＳ９３，ＹＥＳ）、この受信メッセージの値ｃｏｌｏｒを変数ｖａｌに格納する（ステップＳ９４）。そして、評価関数ｓｕｂｓｔｉｔｕｔｅ（ｖａｌ，ｖａｒ，ｎｅｘｔ）を評価し、評価結果（！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｃｏｌｏｒ  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））））を変数ｐに格納する（ステップＳ９５）。これにより、タプル空間２からの受信処理を終了し、図５のステップＳ３１に戻る。
【００８１】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（！  ０  ｌｉｓｔ３（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）  （？  ２０  ｄａｔａ２  （！  −１０  ｃｏｌｏｒ  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））））を変数ｖａｌに格納する（図５のステップＳ３１）。
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果！を変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が！であるので（ステップＳ３８，ＹＥＳ）、タプル空間２への送信処理を行う（ステップＳ３９）。
【００８２】
具体的には、まず、評価関数２ｎｄ（ｐ）および３ｒｄ（ｐ）を評価し、評価結果０および（ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０）をそれぞれ変数ａｄｒｓおよびｖａｌに格納する（図７のステップＳ６１）。また、評価関数４ｔｈ（ｐ）を評価し、評価結果（？  ２０  ｄａｔａ２  （！  −１０  ｃｏｌｏｒ  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））））を変数ｐに格納し直す（ステップＳ６２）。
続いて、ウィジェットテーブル部３４にリクエスト「（“ｓｅａｒｃｈ”  ０）」を送り（ステップＳ６３）、チャネル識別子０に対応するファイルが自装置内に存在するか否かをウィジェットテーブル部３４に問い合わせ、ウィジェットテーブル部３４から結果が送り返されるまで待つ。
【００８３】
このとき、ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待っており（図３のステップＳ１）、受信したリクエスト「（“ｓｅａｒｃｈ”  ０）」を変数ｒに格納する（ステップＳ２）。そして、評価関数１ｓｔ（ｒ）を評価し、評価結果“ｓｅａｒｃｈ”を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果０を変数ｒに格納し直す（ステップＳ４）。変数ｃを評価すると（ステップＳ５）、変数ｃの内容が“ｓｅａｒｃｈ”であるので（ステップＳ６，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果（０，ｗｉｄ）を変数ｒに格納し直す（ステップＳ７）。そして、変数ｒに格納された評価結果（０，ｗｉｄ）をリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ８）、ステップＳ１に戻る。
【００８４】
プログラムコード実行部４１は、ウィジェットテーブル部３４から結果を受信すると（図７のステップＳ６４）、その結果（０，ｗｉｄ）を変数ｔｍｐＷＤに格納する（ステップＳ６５）。変数ｔｍｐＷＤを評価すると、評価結果がチャネル識別子とウィジェットとの組（０  ｗｉｄ）であるので（ステップＳ６６，ＮＯ）、評価関数２ｎｄ（ｔｍｐＷＤ）を評価し、評価結果ｗｉｄを変数ｔｍｐＷＤに格納し直す（ステップＳ６９）。また、評価関数１ｓｔ（ｖａｌ），２ｎｄ（ｖａｌ），３ｒｄ（ｖａｌ）を評価し、それぞれの値ｅｖｅｎｔ，ｏｎ−ｃｌｉｃｋ，２０を変数ｖａｌ１，ｖａｌ２，ｖａｌ３に格納する。（ステップＳ７０）。
【００８５】
変数ｖａｌ１を評価すると（ステップＳ７１）、変数ｖａｌ１がｒｅａｄでもｗｒｉｔｅでもなくｅｖｅｎｔであるので（ステップＳ７２，ＮＯかつステップＳ７６，ＮＯ）、評価関数ｃｏｎｓ（ｌｉｓｔ２（ｌｉｓｔ２（ｖａｌ２，ｔｍｐＷＤ），ｖａｌ３），ｅｖｅｎｔＴａｂｌｅ）を評価し、評価値すなわちリスト（（ｏｎ−ｃｌｏｃｋ  ｗｉｄ）  ２０）を変数ｅｖｅｎｔＴａｂｌｅの評価値の先頭に追加したものを、変数ｅｖｅｎｔＴａｂｌｅに格納し直す（ステップＳ７８）。これにより、イベントの種類であるｖａｌ２の評価値ｏｎ−ｃｌｉｃｋとウィジェットｗｉｄとの組（ｏｎ−ｃｌｉｃｋ  ｗｉｄ）からチャネル２０への対応がイベントテーブルに保持される。
【００８６】
続いて、評価関数ａｓｓｏｃ（ｖａｌ２，ｔａｉｏｕＴａｂｌｅ）を評価し、評価値（ｏｎ−ｃｌｉｃｋ  ｆ−ｏｎ−ｃｌｉｃｋ）を変数ｖａｌ３に格納し直す（ステップＳ７９）。そして、評価関数２ｎｄ（ｖａｌ３）を評価し、評価値ｆ−ｏｎ−ｃｌｉｃｋを変数ｖａｌ３に格納し直す（ステップＳ８０）。さらに、評価関数ｓｅｔ−ｅｖｅｎｔ（ｖａｌ２，ｔｍｐＷＤ，ｖａｌ３）を評価する（ステップＳ８１）。これにより、ウィジェットｗｉｄでイベントｏｎ−ｃｌｉｃｋが起こったときに呼び出される評価関数の名前が、ｆ−ｏｎ−ｃｌｉｃｋに更新される。タプル空間２への送信処理を終了し、図５のステップＳ３１に戻る。
【００８７】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（？  ２０  ｄａｔａ２  （！  −１０  ｃｏｌｏｒ  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））））を変数ｖａｌに格納する（図５のステップＳ３１）。
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果？を変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が？であるので（ステップＳ４０，ＹＥＳ）、タプル空間２からの受信処理を行う（ステップＳ４１）。
【００８８】
具体的には、まず、評価関数２ｎｄ（ｐ），３ｒｄ（ｐ）および４ｔｈ（ｐ）を評価し、評価結果２０，ｄａｔａ２および（！  −１０  ｃｏｌｏｒ  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））をそれぞれ変数ａｄｒｓ，ｖａｒおよびｎｅｘｔに格納する（ステップＳ９１）。続いて、リクエスト送信部３１を介してタプル空間２に受信リクエスト（ｒｅｃｅｉｖｅ，２０）を送る（ステップＳ９２）。そして、受信メッセージが送り返されるのを待つ。
【００８９】
タプル空間２は、受信した受信リクエスト（ｒｅｃｅｉｖｅ，２０）と同じチャネル識別子２０を持つ送信リクエストがタプル空間２内に存在するかどうかを調べる。存在しない場合には、受信リクエスト（ｒｅｃｅｉｖｅ，２０）の送信元ホスト装置３に受信メッセージとして値ＮＵＬＬを送る。
【００９０】
プログラムコード実行部４１は、タプル空間２からの受信メッセージを結果受信部３２を介して受信すると（図９のステップＳ９３，ＹＥＳ）、この受信メッセージの値ＮＵＬＬを変数ｖａｌに格納する（ステップＳ９４）。そして、評価関数ｓｕｂｓｔｉｔｕｔｅ（ｖａｌ，ｖａｒ，ｎｅｘｔ）を評価し、評価結果（！  −１０  ｃｏｌｏｒ  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））を変数ｐに格納する（ステップＳ９５）。これにより、タプル空間２からの受信処理を終了し、図５のステップＳ３１に戻る。
【００９１】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（！  −１０  ｃｏｌｏｒ  （！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ）））を変数ｖａｌに格納する（図５のステップＳ３１）。
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果！を変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が！であるので（ステップＳ３８，ＹＥＳ）、タプル空間２への送信処理を行う（ステップＳ３９）。
【００９２】
具体的には、まず、評価関数２ｎｄ（ｐ）および３ｒｄ（ｐ）を評価し、評価結果−１０およびｃｏｌｏｒをそれぞれ変数ａｄｒｓおよびｖａｌに格納する（図７のステップＳ６１）。また、評価関数４ｔｈ（ｐ）を評価し、評価結果（！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））を変数ｐに格納し直す（ステップＳ６２）。
続いて、ウィジェットテーブル部３４にリクエスト「（“ｓｅａｒｃｈ”  １０）」を送り（ステップＳ６３）、チャネル識別子１０に対応するファイルが自装置内に存在するか否かをウィジェットテーブル部３４に問い合わせ、ウィジェットテーブル部３４から結果が送り返されるまで待つ。
【００９３】
このとき、ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待っており（図３のステップＳ１）、受信したリクエスト「（“ｓｅａｒｃｈ”  １０）」を変数ｒに格納する（ステップＳ２）。そして、評価関数１ｓｔ（ｒ）を評価し、評価結果“ｓｅａｒｃｈ”を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果１０を変数ｒに格納し直す（ステップＳ４）。変数ｃを評価すると（ステップＳ５）、変数ｃの内容が“ｓｅａｒｃｈ”であるので（ステップＳ６，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果ＮＵＬＬを変数ｒに格納し直す（ステップＳ７）。そして、変数ｒに格納された評価結果ＮＵＬＬをリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ８）、ステップＳ１に戻る。
【００９４】
プログラムコード実行部４１は、ウィジェットテーブル部３４から結果を受信すると（図７のステップＳ６４）、その結果ＮＵＬＬを変数ｔｍｐＷＤに格納する（ステップＳ６５）。変数ｔｍｐＷＤを評価すると、評価結果がＮＵＬＬであるので（ステップＳ６６，ＹＥＳ）、リクエスト送信部３１を介してタプル空間２に送信リクエスト（ｓｅｎｄ，−１０，ｃｏｌｏｒ）を送る（ステップＳ６７）。そして、送信完了メッセージが送り返されるまで待つ。
【００９５】
タプル空間２は、受信した送信リクエスト（ｓｅｎｄ，−１０，ｃｏｌｏｒ）と同じチャネル識別子−１０を持つ受信リクエスト（ｒｅｃｅｉｖｅ，−１０）がタプル空間２内に存在するかどうかを調べる。存在する場合には、送信リクエスト（ｓｅｎｄ，−１０，ｃｏｌｏｒ）の送信元ホスト装置３に送信完了メッセージを送り、受信リクエスト（ｒｅｃｅｉｖｅ，−１０）の送信元ホスト装置３に受信メッセージｃｏｌｏｒを送る。
プログラムコード実行部４１は、タプル空間２からの送信完了メッセージを結果受信部３２を介して受信すると（ステップＳ６８，ＹＥＳ）、タプル空間２への送信処理を終了し、図５のステップＳ３１に戻る。
【００９６】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（！ｇ  ｃｌｏｓｅ  ０  （ｅｎｄ））を変数ｖａｌに格納する（図５のステップＳ３１）。
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果！ｇを変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容が！ｇであるので（ステップＳ４４，ＹＥＳ）、ウィジェットのクローズ処理を行う（ステップＳ４５）。
【００９７】
具体的には、まず、評価関数３ｒｄ（ｐ），４ｔｈ（ｐ）を評価し、評価結果０，（ｅｎｄ）をそれぞれ変数ａｄｒｓ，ｐに格納する（図１１のステップＳ１１１）。続いて、ウィジェットテーブル部３４にリクエスト「（“ｓｅａｒｃｈ”  ０）」を送り（ステップＳ１１２）、リクエストに対する結果がウィジェットテーブル部３４から送り返されるまで待つ。
【００９８】
このとき、ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待っており（図３のステップＳ１）、受信したリクエスト「（“ｓｅａｒｃｈ”  ０）」を変数ｒに格納する（ステップＳ２）。そして、評価関数１ｓｔ（ｒ）を評価し、評価結果“ｓｅａｒｃｈ”を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果０を変数ｒに格納し直す（ステップＳ４）。変数ｃを評価すると（ステップＳ５）、変数ｃの内容が“ｓｅａｒｃｈ”であるので（ステップＳ６，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果（０，ｗｉｄ）を変数ｒに格納し直す（ステップＳ７）。そして、変数ｒに格納された評価結果（０，ｗｉｄ）をリクエストに対する結果としてプログラムコード実行部４１に返し（ステップＳ８）、ステップＳ１に戻る。
【００９９】
プログラムコード実行部４１は、ウィジェットテーブル部３４から結果を受信すると（図１１のステップＳ１１３）、その結果（０，ｗｉｄ）を変数ｔｍｐＷＤに格納する（ステップＳ１１４）。
続いて、ウィジェットテーブル部３４にリクエスト「（“ｃｌｏｓｅ”  ０）」を送る（ステップＳ１１５）。また、評価関数ｃｌｏｓｅ（ｗｉｄ）を実行し（ステップＳ１１６）、図５のステップＳ３１に戻る。
【０１００】
このとき、ウィジェットテーブル部３４は、プログラムコード実行部４１からのリクエストの到着を待っており（図３のステップＳ１）、受信したリクエスト「（“ｃｌｏｓｅ”  ０）」を変数ｒに格納する（ステップＳ２）。そして、評価関数１ｓｔ（ｒ）を評価し、評価結果“ｃｌｏｓｅ”を変数ｃに格納する（ステップＳ３）。また、評価関数２ｎｄ（ｒ）を評価し、評価結果０を変数ｒに格納し直す（ステップＳ４）。変数ｃを評価すると（ステップＳ５）、変数ｃの内容が“ｃｌｏｓｅ”であるので（ステップＳ１３，ＹＥＳ）、評価関数ａｓｓｏｃ（ｒ，ｗｉｄｇｅｔＴａｂｌｅ）を評価し、評価結果（０，ｗｉｄ）を変数ｒに格納し直す（ステップＳ１４）。そして、変数ｒと同一内容の組（０，ｗｉｄ）を変数ｗｉｄｇｅｔＴａｂｌｅから削除して、変数ｗｉｄｇｅｔＴａｂｌｅに格納し直し（ステップＳ１５）、ステップＳ１に戻る。
【０１０１】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果（ｅｎｄ）を変数ｖａｌに格納する（図５のステップＳ３１）。
変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬでないので（ステップＳ３２，ＮＯ）、評価関数１ｓｔ（ｐ）を評価し、評価結果ｅｎｄを変数ｃｏｍに格納する（ステップＳ３３）。さらに、変数ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納する（ステップＳ３４）。変数ｃｏｍを評価すると（ステップＳ３５）、変数ｃｏｍの内容がｅｎｄであるので（ステップＳ３６，ＹＥＳ）、終了処理を行う（ステップＳ３７）。すなわち、変数ｐ，ｃｏｍ，ａｄｒｓ，ｖａｌ，ｖａｒ，ｎｅｘｔに値ＮＵＬＬを格納し（図６のステップＳ５１）、図５のステップＳ３１に戻る。
【０１０２】
次に、プログラムコード実行部４１は、変数ｐを評価し、評価結果ＮＵＬＬを変数ｖａｌに格納する（図５のステップＳ３１）。変数ｖａｌを評価すると、変数ｖａｌの内容がＮＵＬＬなので（ステップＳ３２，ＹＥＳ）、処理を終了する。
【０１０３】
プログラムコード実行部４１が前述の処理を実行しているときに、ウィジェットｗｉｄ上でマウスクリックイベントが発生すると、ウィンドウシステム３６は、ｗｉｄとＮＵＬＬを引数として、イベント評価関数部ｏｎ−ｃｌｉｃｋを呼び出す。
【０１０４】
呼び出されたイベント評価関数部ｏｎ−ｃｌｉｃｋは、ウィンドウシステム３６から渡された引数ｗｉｄ，ＮＵＬＬをそれぞれ変数ｗｉｄＴＥＭＰ，ｄａｔａに格納する。そして、評価関数ａｓｓｏｃ（ｌｉｓｔ２（Ａ，ｗｉｄＴＥＭＰ），ｅｖｅｎｔＴａｂｌｅ）を評価し、評価結果（ｏｎ−ｃｌｉｃｋ  ｗｉｄ  ２０）を変数ｖａｌに格納する（図４のステップＳ２１）。さらに、評価関数２ｎｄ（ｖａｌ）を評価し、評価結果２０を変数ａｄｒｓに格納する（ステップＳ２２）。
続いて、リクエスト送信部３１に送信リクエスト（ｓｅｎｄ，２０，ＮＵＬＬ）を送ることにより（ステップＳ２３）、タプル空間２にイベントの検出時に呼び出される評価関数の引数を送る。そして、送信完了メッセージが送り返されるまで待つ。
【０１０５】
タプル空間２は、受信した送信リクエスト（ｓｅｎｄ，２０，ＮＵＬＬ）と同じチャネル識別子２０を持つ受信リクエスト（ｒｅｃｅｉｖｅ，２０）がタプル空間２内に存在するかどうかを調べる。存在する場合には、送信リクエスト（ｓｅｎｄ，２０，ＮＵＬＬ）の送信元ホスト装置３に送信完了メッセージを送り、受信リクエスト（ｒｅｃｅｉｖｅ，２０）の送信元ホスト装置３に受信メッセージＮＵＬＬを送る。
イベント評価関数部ｏｎ−ｃｌｉｃｋは、タプル空間２からの送信完了メッセージを結果受信部３２を介して受信すると（ステップＳ２４，ＹＥＳ）、返り値としてＮＵＬＬを返し（ステップＳ２５）、処理を終了する。
【０１０６】
本実施の形態では、ホスト装置３が、リクエスト送信部３１と、結果受信部３２と、新規チャネル生成部３３と、ウィジェットテーブル部３４と、実行部３５と、ウィンドウシステム３６とを持つものとして説明した。しかし、ホスト装置３の構成を、プログラムコードの各命令に基づく一連の動作を実現する機能部の観点から捉えることもできる。
例えば、ウィジェット生成命令？ｇにしたがうことにより、ウィジェットを生成するとともに、このウィジェットに対応するチャネルを新規に生成し、これらのウィジェットとチャネルとを対応付けて保持するウィジェット生成保持部が実現される。
また、属性読出送信命令！およびｒｅａｄにしたがうことにより、この要求により指定されたチャネルに対応するウィジェットをウィジェット生成保持部から読み出し、読み出されたウィジェットの属性をタプル空間２に送信する属性読出送信部が実現される。
【０１０７】
また、属性変更命令！およびｗｒｉｔｅにしたがうことにより、この命令により指定されたチャネルに対応するウィジェットをウィジェット生成保持部から読み出し、読み出されたウィジェットの属性を変更する属性変更部が実現される。
また、ウィジェットクローズ命令！ｇにしたがうことにより、この要求により指定されたチャネルに対応するウィジェットをクローズして終了するクローズ終了部が実現される。
さらに、イベントが発生したときに呼び出される関数の引数をタプル空間に送信する引数送信部が実現される。
【０１０８】
なお、本実施の形態において、タプル空間２およびホスト装置３は、コンピュータにより実現することができる。このコンピュータは、中央処理装置（ＣＰＵ）と、リードオンリメモリ（ＲＯＭ）と、ランダムアクセスメモリ（ＲＡＭ）と、表示装置やキーボード、外部記憶装置またはネットワーク１とのインタフェースをとるための回路などを備えた公知の構成のものでよい。
ＣＰＵは、ＲＯＭもしくはＲＡＭに記憶されたプログラム、またはキーボードから入力されたコマンドにしたがって処理を実行する。また、ＣＰＵは、外部記憶装置にデータを書き込んだり、外部記憶装置からデータを読み出したりすることができる。さらに、ＣＰＵは、ネットワーク１からデータを取得したり、通信ネットワークにデータを送出したりすることができる。
【０１０９】
このようなコンピュータ（タプル空間２およびホスト装置３）において、本発明のウィジェット操作方法および装置を実現させるためのプログラムは、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、メモリカードなどの記録媒体に記録された状態で提供される。この記録媒体を外部記憶装置に挿入すると、記録媒体に書き込まれたプログラムが読み取られ、コンピュータに転送される。そして、ＣＰＵは、読み込んだプログラムをＲＡＭ等に書き込む。その後に、ネットワーク１、外部記憶装置またはキーボード等の外部入力装置から入力されたデータに基づき、ＣＰＵは、前述の処理を実行する。
【図面の簡単な説明】
【０１１０】
【図１】チャネルの生成機能を持つタプル空間型通信システムの構成を示すブロック図である。
【図２】ホスト装置の一構成例を示すブロック図である。
【図３】ウィジェットテーブル部の動作の流れを示すフローチャートである。
【図４】イベント評価関数部の動作の流れを示すフローチャートである。
【図５】プログラムコード実行部の動作の流れを示すフローチャートである。
【図６】終了処理の流れを示すフローチャートである。
【図７】タプル空間への送信処理の流れを示すフローチャートである。
【図８】図７に引き続くフローチャートである。
【図９】タプル空間からの受信処理の流れを示すフローチャートである。
【図１０】ウィジェットの生成処理の流れを示すフローチャートである。
【図１１】ウィジェットのクローズ処理の流れを示すフローチャートである。
【符号の説明】
【０１１１】
１…ネットワーク、２…タプル空間、３（３Ａ〜３Ｎ）…ホスト装置、３１…リクエスト送信部、３２…結果受信部、３３…新規チャネル生成部、３４…ウィジェットテーブル部、３５…実行部、３５…ウィンドウシステム、４１（４１−１，４１−２）…プログラムコード実行部、４２…イベントテーブル、４３…評価関数名対応表、４４（４４−１，４４−２）…イベント評価関数部。
【図１】
2005346434.tif 000003
【図２】
2005346434.tif 000004
【図３】
2005346434.tif 000005
【図４】
2005346434.tif 000006
【図５】
2005346434.tif 000007
【図６】
2005346434.tif 000008
【図７】
2005346434.tif 000009
【図８】
2005346434.tif 000010
【図９】
2005346434.tif 000011
【図１０】
2005346434.tif 000012
【図１１】
2005346434.tif 000013