(57)【要約】      （修正有）【課題】ＵＩを有するスクリプト実行中にユーザ操作により発生したイベントを適切に処理できるイベント駆動型アプリケーションにおけるイベント配送方法を提供する。【解決手段】ユーザインターフェースを有するスクリプトを実行するイベント駆動型アプリケーション１におけるイベントを配送するにあたり、スクリプトが実行される際に、対応する状態マシン４を一時的に確保するとともに、イベントハンドラ２に状態マシン４を登録し、所定のイベントを受けた際に、イベントハンドラ２に状態マシン４が登録されていれば、状態マシン４へイベントを配送する。【選択図】図１
2007148874.tif 000002
【特許請求の範囲】
【請求項１】
ユーザインターフェースを有するスクリプトを実行するイベント駆動型アプリケーションにおけるイベントを配送するにあたり、
前記スクリプトが実行される際に、対応する状態マシンを一時的に確保するとともに、イベントハンドラに前記状態マシンを登録し、
所定のイベントを受けた際に、前記イベントハンドラに前記状態マシンが登録されていれば、当該状態マシンへ前記イベントを配送することを特徴とするイベント駆動型アプリケーションにおけるイベント配送方法。
【請求項２】
前記イベントを前記状態マシンへ配送する際に、前記イベントハンドラにおける前記状態マシンの登録を削除することを特徴とする請求項１に記載のイベント駆動型アプリケーションにおけるイベント配送方法。
【請求項３】
前記イベントハンドラに前記状態マシンを登録する際に有効状態で登録し、所定のイベントを受けた際に、前記イベントハンドラに前記状態マシンが登録されていて、かつ有効状態であれば、当該状態マシンへ前記イベントを配送することを特徴とする請求項１または２に記載のイベント駆動型アプリケーションにおけるイベント配送方法。
【請求項４】
前記状態マシンを一時的に確保したら、前記スクリプトを待ち状態に遷移させ、前記状態マシンの処理が完了したら、前記スクリプトの実行を再開させることを特徴とする請求項１乃至３のいずれか一項に記載のイベント駆動型アプリケーションにおけるイベント配送方法。
【請求項５】
ユーザインターフェースを有するスクリプトを実行する請求項１乃至４のいずれか一項に記載のイベント駆動型アプリケーションにおけるイベント配送方法を実施するデジタル放送受信装置であって、
前記イベント駆動型アプリケーションを格納する記憶手段と、
デジタル放送受信手段と、
少なくとも前記デジタル放送受信手段で受信した情報を表示する表示手段と、
前記表示手段における表示情報に応じて、前記スクリプトが実行される際に、対応する状態マシンを一時的に確保するとともに、イベントハンドラに前記状態マシンを登録し、所定のイベントを受けた際に、前記イベントハンドラに前記状態マシンが登録されていれば、当該状態マシンへ前記イベントを配送するように制御する制御手段と、
を有することを特徴とするデジタル放送受信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザインターフェース（以下、単にＵＩとも言う）を有するスクリプトを実行するイベント駆動型アプリケーションにおけるイベント配送方法およびそれを実施するデジタル放送受信装置に関するものである。
【背景技術】
【０００２】
現在、衛星デジタル放送や地上デジタル放送におけるデータ放送では、ＸＨＴＭＬ（eXtensible Hyper Text Markup Language）を拡張したＢＭＬ（Broadcast Markup Language）というマークアップ言語で記述された文書を送信し、このＢＭＬ文書を受信機で受信・表示してイベント処理を行っている。
【０００３】
ＢＭＬ文書には、表示するテキストやスタイルの他に、イベントとスクリプトとを定義し、イベント発生時に実行すべき関数をスクリプトで記述できるようになっている。スクリプトには、ＥＣＭＡＳｃｒｉｐｔと呼ばれる言語が採用されている。ＥＣＭＡＳｃｒｉｐｔは、ＥＣＭＡ（European Computer Manufacturers’ Association）がＥＣＭＡ−２６２として定めたスクリプト言語で、ＩＳＯ／ＩＥＣ １６２６２として承認されたものが、ＥＣＭＡ−２６２ ｓｅｃｏｎｄ ｅｄｉｔｉｏｎとして発行されている。さらに、ＥＣＭＡ−２６２はｔｈｉｒｄ ｅｄｉｔｉｏｎが発行されている。
【０００４】
また、従来、地上デジタル放送を携帯機器で受信するための運用規定が定められている。この運用規定では、地上デジタル放送を受信する携帯機器においてもＢＭＬで記述された文書を表示してＥＣＭＡＳｃｒｉｐｔを実行することが求められている。
【０００５】
一方、従来のスクリプトとして、例えばレーザービームプリンタにおけるページ記述言語が知られている。また、スクリプトプログラムを実行するものとして、例えば入力されたインタープリタプログラムから冗長なコマンドを削除して最適化することで処理速度の高速化を図ったインタープリタ実行装置（例えば、特許文献１参照）や、スクリプトを中間コードに変換してから実行することで処理速度の高速化を図った画像形成装置（例えば、特許文献２参照）も知られている。
【０００６】
ここで、スクリプトは、人が記述する高級言語であり、中央演算処理装置(ＣＰＵ，Central Processing Unit)に依存した機械語命令にコンパイルせずに、インタープリタによって解釈実行されることが特徴である。また、インタープリタは、通常、字句解析(lexical analysis)と、構文解析(syntax analysis)との処理機能を備えており、公知のソフトウエアでは、ｌｅｘにより字句解析器を作成することができ、ｙａｃｃ、ｂｉｓｏｎにより構文解析器を作成することができる。
【０００７】
構文解析器は、解析結果として実行処理が可能な中間表現を作成するもので、この中間表現には、評価器(Evaluater)によって評価可能なツリー表現と、仮想マシン(ＶＭ，Virtual Machine)によって実行可能な中間コードとがある。
【０００８】
ツリー表現は、例えばDavid Leonard氏によって作成され公開されたＳＥＥ（Simple ECMAScript Engine）が採用している(http://www.adaptive-enterprises.com.au/~d/software/see/ 参照)。
【０００９】
また、中間コードは、仮想マシンで処理するか、あるいはさらに本来のＣＰＵの機械語に変換して実行される。仮想マシンで処理する場合は、多くの場合、関数の引数と戻り値とをスタックのみを用いて受け渡すスタックマシンを採用して、仮想マシンが中間言語で記述された処理を実行するようにしており、例えばThe Mozilla Organizationが公開している、Ｓｐｉｄｅｒ Ｍｏｎｋｅｙと言うコードネームのＥＣＭＡＳｃｒｉｐｔインタープリタが知られている(http://www.mozilla.org/js/spidermonkey/ 参照)。
【００１０】
評価器によりツリー表現を評価する場合には、本来の実行環境における関数呼び出しが多数発生し、また様々な付随した処理を必要とすることから、実行速度が仮想マシン方式よりも遅くなり、また本来の実行環境におけるスタックメモリを多く消費することになる。このため、ツリー表現は、簡易なインタープリタで使用され、より高度なインタープリタでは、中間コードが採用され、さらに処理を高速化する場合には中間コードを機械語に変換して実行することが行われている。
【００１１】
なお、実行環境とは、開発環境に対する名称でランタイムとも呼ばれ、ある目的のために開発作成されたスクリプトまたはその中間コードを実行し、かつ実行時に必要な標準関数などを提供するソフトウエアである。したがって、実行環境は、少なくとも中間表現を処理実行する機能を含む必要があるが、字句解析器および構文解析器等を備えて、インタープリタ全体を含んでいてもよい。
【００１２】
【特許文献１】特開平９−３３０２３１号公報
【特許文献２】特開２０００−６４９８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかしながら、従来のツリー表現を評価実行するインタープリタでは、ツリーのルートから評価を開始し、ルート側の結果が確定しないままツリーのリーフ側の評価をネストで開始するようにしている。このため、本来の実行環境では、評価関数が次々とネストして呼び出されてスタックが消費されることから、スクリプトの実行中に実行を一時保留して、ＣＰＵの実行権限をＯＳ（Operating System）に戻し、他のタスクと実行権限を分かち合うといった処理ができなくなる。つまり、スクリプトの実行を開始すると、その処理が完了するまで、ＣＰＵの実行権限が独占されてしまうことから、途中でユーザが所望する他のタスクを実行できないという問題がある。
【００１４】
これに対し、従来の中間コードを仮想マシンで実行するスクリプト実行環境やインタープリタでは、スクリプト実行時の状態が、仮想マシンがアクセスするスタックに保存されており、このスタックは実行コンテキストの中に存在して本来の実行環境のスタックとは独立している。したがって、中間コードを生成する際に、処理を一時保留するための命令を挿入するなどすれば、仮想マシンでの処理を保留して、実行状態を保存したままＣＰＵの実行権限をＯＳに戻し、その後、ＣＰＵの実行権限を得た際に処理を再開することが可能である。
【００１５】
しかし、このタイプのスクリプト実行環境でも、スクリプトがＵＩ（User Interface）に表示を行って、ユーザが選択した結果のイベントを受け取ろうとすると、そのイベントをスクリプトが受け取ることができない。
【００１６】
以下、この点について、さらに詳細に説明する。
【００１７】
通常、ＵＩとインタラクションをするアプリケーションは、イベント駆動型アプリケーションとして作成される。このイベント駆動型アプリケーションは、イベントハンドラを備えており、アプリケーション実行環境はイベントハンドラを呼び出してイベントを配送する。イベントハンドラでは、通知されたイベントに応じて実行すべき処理を記述しておく。
【００１８】
複雑なアプリケーションでは、状態マシンを備えるのが普通であり、イベントハンドラは状態マシンを呼び出してイベントを配送し、状態マシンはイベントを受けると状態を変化させることにより、所望の仕様の処理を実現することが可能となる。ここで、配送されるイベントには、それをどの関数（あるいは状態マシン）が処理するべきかという付加情報を添付することができるので、イベントハンドラはユーザ操作により発生したイベントを適切な関数（や状態マシン）に配送することができる。
【００１９】
しかし、このようなイベント駆動型アプリケーションにおいて、スクリプト実行中に、スクリプトがＵＩに表示を行い、ユーザが選択した結果のイベントをスクリプトが受け取ろうとすると、イベントハンドラは受け取ったイベントを配送すべき適切な関数（や状態マシン）を見出すことができないため、イベントを受け取ることができないことになる。このため、例えば地上デジタル放送の受信装置において、擬似オブジェクトがＵＩ上にダイアログを出し、ユーザに選択させようとしても、それを実現することができないことになる。
【００２０】
したがって、かかる事情に鑑みてなされた本発明の第１の目的は、ＵＩを有するスクリプト実行中に、ユーザ操作により発生したイベントを適切に処理できるイベント駆動型アプリケーションにおけるイベント配送方法を提供することにある。
【００２１】
さらに、本発明の第２の目的は、上記のイベント配送方法を実施し、例えば地上デジタル放送の受信において擬似オブジェクトがＵＩ上にダイアログを出して、ユーザに選択させることができ、使い勝手を向上できるデジタル放送受信装置を提供することにある。
【課題を解決するための手段】
【００２２】
上記第１の目的を達成する請求項１に係るイベント駆動型アプリケーションにおけるイベント配送方法の発明は、ユーザインターフェースを有するスクリプトを実行するイベント駆動型アプリケーションにおけるイベントを配送するにあたり、前記スクリプトが実行される際に、対応する状態マシンを一時的に確保するとともに、イベントハンドラに前記状態マシンを登録し、所定のイベントを受けた際に、前記イベントハンドラに前記状態マシンが登録されていれば、当該状態マシンへ前記イベントを配送することを特徴とするものである。
【００２３】
請求項２に係る発明は、請求項１に記載のイベント駆動型アプリケーションにおけるイベント配送方法において、前記イベントを前記状態マシンへ配送する際に、前記イベントハンドラにおける前記状態マシンの登録を削除することを特徴とするものである。
【００２４】
請求項３に係る発明は、請求項１または２に記載のイベント駆動型アプリケーションにおけるイベント配送方法において、前記イベントハンドラに前記状態マシンを登録する際に有効状態で登録し、所定のイベントを受けた際に、前記イベントハンドラに前記状態マシンが登録されていて、かつ有効状態であれば、当該状態マシンへ前記イベントを配送することを特徴とするものである。
【００２５】
請求項４に係る発明は、請求項１乃至３のいずれか一項に記載のイベント駆動型アプリケーションにおけるイベント配送方法において、前記状態マシンを一時的に確保したら、前記スクリプトを待ち状態に遷移させ、前記状態マシンの処理が完了したら、前記スクリプトの実行を再開させることを特徴とするものである。
【００２６】
さらに、上記第２の目的を達成する請求項５に係る発明は、ユーザインターフェースを有するスクリプトを実行する請求項１乃至４のいずれか一項に記載のイベント駆動型アプリケーションにおけるイベント配送方法を実施するデジタル放送受信装置であって、前記イベント駆動型アプリケーションを格納する記憶手段と、デジタル放送受信手段と、少なくとも前記デジタル放送受信手段で受信した情報を表示する表示手段と、前記表示手段における表示情報に応じて、前記スクリプトが実行される際に、対応する状態マシンを一時的に確保するとともに、イベントハンドラに前記状態マシンを登録し、所定のイベントを受けた際に、前記イベントハンドラに前記状態マシンが登録されていれば、当該状態マシンへ前記イベントを配送するように制御する制御手段と、を有することを特徴とするものである。
【発明の効果】
【００２７】
本発明によるイベント駆動型アプリケーションにおけるイベント配送方法によれば、スクリプトが実行される際に、対応する状態マシンを一時的に確保してイベントハンドラに登録し、所定のイベントを受けた際にイベントハンドラに前記状態マシンが登録されていれば、当該状態マシンへイベントを配送するので、ＵＩを有するスクリプト実行中に、ユーザ操作により発生したイベントを適切に処理することができる。
【００２８】
さらに、本発明によるデジタル放送受信装置によれば、デジタル放送の受信表示に応じて、ユーザインターフェースを有するスクリプトが実行される際に、対応する状態マシンを一時的に確保してイベントハンドラに登録し、所定のイベントを受けた際にイベントハンドラに前記状態マシンが登録されていれば、当該状態マシンへイベントを配送するように制御するようにしたので、例えば地上デジタル放送の受信において擬似オブジェクトがＵＩ上にダイアログを出して、ユーザに選択させることができ、使い勝手を向上することができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明の実施の形態について図を参照して説明する。
【００３０】
（第１実施の形態）
図１乃至図３は本発明の第１実施の形態に係るイベント駆動型アプリケーションにおけるイベント配送方法を説明するもので、図１はイベント駆動型アプリケーションの概念的構成を示すブロック図、図２および図３は動作を示すフローチャートである。
【００３１】
図１において、イベント駆動型アプリケーション１（以下、単にアプリケーション１とも言う）は、ＯＳ（Operating System）９が管理するタスクの一つであるアプリケーション実行環境８の上で動作する。
【００３２】
アプリケーション１は、イベントハンドラ２を備えており、イベントハンドラ２は登録部３を備えている。アプリケーション実行環境８はイベントハンドラ２を呼び出してイベントを配送する。なお、イベントハンドラ２にイベントの処理方法を実装しておくこともできるが、本実施の形態におけるアプリケーション１は状態マシンとして動作するもので、ディフォルト状態マシン６を備えており、このディフォルト状態マシン６にイベントを配送する。
【００３３】
ディフォルト状態マシン６は、イベントＩ／Ｆ（Interface）関数７を備えており、イベントハンドラ２はこのイベントＩ／Ｆ関数７を呼び出すことによってイベントを配送する。
【００３４】
また、アプリケーション１は、一時的状態マシン４をヒープに割り当てるようになっている。この一時的状態マシン４は、イベントＩ／Ｆ関数５を備えており、イベントの配送を受け取れるように実装される。なお、アプリケーション１の起動時の状態では、一時的状態マシン４はまだ確保されていない。
【００３５】
次に、図２に示すフローチャートを参照して動作を説明する。
【００３６】
先ず、ステップ１０１で、一時的状態マシン４を確保して、初期化する。この処理は、アプリケーション１に実装されているディフォルト状態マシン６によって実行する。
【００３７】
その後、ステップ１０２で、一時的状態マシン４を実行する。この一時的状態マシン４の実行処理は、通常は実行イベントを配送することによって行うが、ここでは専用の関数もしくはイベントＩ／Ｆ関数５をコールすることによって行う。
【００３８】
次に、ステップ１０３で、イベントハンドラ２の登録部３に一時的状態マシン４の登録情報を有効状態で登録する。ここで、登録情報は、一時的状態マシン４が動作を行うためのインスタンスのアドレスまたはハンドルと、イベントを受け取るためのイベントＩ／Ｆ関数５のアドレスとの双方とするか、あるいはインスタンスのアドレスからイベントＩ／Ｆ関数５のアドレスが求められる場合は、インスタンスのアドレスだけとするか、あるいはインスタンスのアドレスとイベントＩ／Ｆ関数５のアドレスとをテーブルに登録しておく場合には、そのテーブル内でのインデクスとする。
【００３９】
次に、ステップ１０４で、一時的状態マシン４によりＵＩ上にダイアログを表示する。このダイアログの表示処理では、アプリケーション実行環境８が提供するＡＰＩ（Application Program Interface）をコールして、画面上にダイアログを表示する。
【００４０】
次に、ステップ１０５で、一時的状態マシン４をＵＩイベント待ち状態に遷移させる。これにより、イベントハンドラ２はリターンし、ＣＰＵの実行権限はアプリケーション１から解放される。
【００４１】
その後、ステップ１０６で、ユーザによりキー操作されたらダイアログを閉じる。この際、アプリケーション実行環境８はダイアログを画面から消去し、ユーザの選択に応じた情報を伴ったＵＩイベントを発生させる。
【００４２】
次に、ステップ１０７で、イベントハンドラ２はアプリケーション実行環境８から呼び出されてＵＩイベントを受け取る。
【００４３】
その後、ステップ１０８で、イベントハンドラ２は登録部３に登録情報が存在するか判定する。ここで、登録部３には、複数の登録情報を存在させるようにしてもよい。この場合には、イベントの種類や付随データなどから一時的状態マシン４が受け取るべきイベントを特定できるように登録情報を登録しておく。
【００４４】
ステップ１０８での判定の結果、登録情報が存在する場合はステップ１０９へ進み、登録情報が存在しない場合はステップ１１２へ進む。
【００４５】
ステップ１０９では、登録情報を登録部３から取り出して登録部３から削除する。
【００４６】
次に、ステップ１１０で、登録部３から取り出した登録情報が有効状態にあるかどうか判定する。すなわち、登録情報が登録された時点では有効状態であっても、後の処理によって無効状態に変更されている場合があるので、取り出した登録情報が有効状態にあるかを判定する。この判定の結果、登録情報が有効状態であればステップ１１１へ進み、無効状態であればそのＵＩイベントは無視して、このフローを終了する。
【００４７】
ステップ１１１では、登録情報に基づいて特定される一時的状態マシン４にＵＩイベントを配送する。このため、イベントハンドラ２は、有効状態の登録情報から一時的状態マシン４のインスタンスのアドレスと、イベントＩ／Ｆ関数５のアドレスとを割り出し、イベントとインスタンスのアドレスとを引数にセットし呼び出す。この呼び出しによって一時的状態マシン４はＵＩとのインタラクションを完了し、処理を続行する。
【００４８】
処理の続行の結果、処理が完了すると、一時的状態マシン４は自分自身を削除する。これにより、このフローは終了する。
【００４９】
一方、ステップ１０８での判定の結果、登録情報が存在しない場合は、ステップ１１２で、発生したＵＩイベントをディフォルト状態マシン６へ配送する。つまり、イベントハンドラ２は、ディフォルト状態マシン６のイベントＩ／Ｆ関数７をコールし、ディフォルト状態マシン６がＵＩを使用していた場合は適切に処理し、予期していないイベントであった場合は無視して、このフローを終了する。
【００５０】
図２のフローチャートに従って、一時的状態マシン４はＵＩイベントを受け取るが、少なくともアプリケーション実行環境８がアプリケーション１を強制終了させる場合には、ＵＩイベント待ちの状態にある一時的状態マシン４を強制削除する必要がある。
【００５１】
図３は、この場合の動作を示すフローチャートで、一時的状態マシン４がＵＩイベント待ち状態のときに、別のイベントが発生して、これを処理するディフォルト状態マシン６が一時的状態マシン４を強制削除する場合の動作を示したものである。
【００５２】
ディフォルト状態マシン６は、一時的状態マシン４を生成確保したものなので、その情報はイベントハンドラ２の登録部３に保持されている。したがって、先ず、ステップ１２０で、イベントハンドラ２の登録部３に一時的状態マシン４の登録情報が存在するか判定する。
【００５３】
その結果、登録情報が存在していると判定された場合は、ステップ１２１で、一時的状態マシン４の登録情報を無効状態にした後、ステップ１２２で一時的状態マシン４を強制削除し、登録情報が存在していないと判定された場合は、直接、ステップ１２２で一時的状態マシン４を強制削除して、このフローを終了する。
【００５４】
このように、イベントハンドラ２の登録部３における一時的状態マシン４の登録情報を無効状態としておけば、その後は、イベントハンドラ２がＵＩイベントを受け取ってもそれを配送せずに無視するようになる。したがって、本実施の形態のように、アプリケーション実行環境８とのインタラクションを許容する場合に、既に削除された一時的状態マシン４へのイベントの配送を防止することができ、不正な処理を避けることができる。
【００５５】
（第２実施の形態）
図４乃至図８は本発明の第２実施の形態に係るイベント駆動型アプリケーションにおけるイベント配送方法を説明するもので、図４はイベント駆動型アプリケーションの概念的構成を示すブロック図、図５（ａ）乃至（ｄ）は図４に示すスタック１０における動作を説明する概念図、図６乃至図８は第２実施の形態の動作を示すフローチャートである。
【００５６】
図４に示すように、本実施の形態のアプリケーション１は、第１実施の形態において、イベントハンドラ２の登録部３にスタック１０を付加するとともに、スクリプト実行コンテキスト１１およびそのイベントＩ／Ｆ関数１２を付加したもので、その他の構成は第１実施の形態と同様であるので、同一要素には同一参照符号を付して説明を省略する。
【００５７】
スタック１０は、複数の登録情報を貯めることができる記憶手段で、最後に入った情報を最初に取り出すＬＩＦＯ方式のものである。すなわち、図５（ａ）に示すように、スタック１０に第１の登録情報２１が存在している状態で、図５（ｂ）に示すように第２の登録情報２２がプッシュされると、その第２の登録情報２２は第１の登録情報２１の上に積み上げられる。さらに、図５（ｃ）に示すように、第３の登録情報２３がプッシュされると、その第３の登録情報２３は第２の登録情報２２の上に積み上げられる。また、図５（ｃ）に示すスタック１０の状態から、登録情報をポップする（取り出す）と、図５（ｄ）に示すように最後に入った第３の登録情報２３が取り出されて、スタック１０には第２の登録情報２２と第１の登録情報２１とが残ることになる。
【００５８】
本実施の形態では、アプリケーション実行環境８による複数のダイアログの表示をスタック１０によって管理している。すなわち、最後に実行して表示したダイアログが画面に表示され、それから時間を遡る順番に重なってダイアログが存在し、画面に表示されているダイアログがユーザの操作によって閉じられると、次の最後に実行して表示したダイアログが表示される。
【００５９】
アプリケーション実行環境８は、ダイアログが閉じられるとＵＩイベントを発生させ、これがイベントハンドラ２に配送される。このＵＩイベントには宛先を特定するための情報は添付されていないので、本実施の形態ではスタック１０を備えることによって、スタック１０にある登録情報に基づいて適切な状態マシンへＵＩイベントを配送することを可能にしている。
【００６０】
次に、図６乃至図８に示すフローチャートを参照して本実施の形態の動作を説明する。なお、図６乃至図８において、第１実施の形態と同様の処理には同じ符号を付してある。
【００６１】
先ず、図６において、ステップ１４１で、スクリプト実行コンテキスト１１によりスクリプトの実行を開始する。スクリプト実行コンテキスト１１とは、スクリプトを構文解析して生成した中間コードと、その中間コードの中のどの命令を現在実行しているかという情報と、スタックマシンである仮想マシンのスタック、などの情報を保持しているデータである。
【００６２】
次に、ステップ１４２で、スクリプトの実行によって所定の関数を呼ぶ。この関数はスクリプトで定義されたものではなく、本来の実行プログラムとして、Ｃ言語で記述されて機械語にコンパイルされた関数である。
【００６３】
次に、ステップ１０１で、呼ばれた関数によって一時的状態マシン４をヒープに確保し、初期化する。つまり、呼ばれた関数は状態マシンとして実装されている。
【００６４】
次に、ステップ１４３で、スクリプト実行コンテキスト１１に含まれる仮想マシンのスタックから、関数の引数を取り出して、一時的状態マシン４へ渡す。
【００６５】
次に、ステップ１４４で、スクリプト実行コンテキスト１１を関数の完了待ち状態に遷移させる。すなわち、スクリプト実行コンテキスト１１もまた状態マシンであって、イベントＩ／Ｆ関数１２を通じてイベントを受け取って動作するイベント駆動型である。
【００６６】
次に、ステップ１０２で、一時的状態マシン４を実行する。一時的状態マシン４は、通常、実行イベントが配送されることによって実行するが、ここでは専用の関数もしくはイベントＩ／Ｆ関数５をコールすることによって実行する。
【００６７】
次に、ステップ１４５で、イベントハンドラ２の登録部３に一時的状態マシン４の第１実施の形態と同様の登録情報を有効状態で登録するとともに、その登録情報をスタック１０にプッシュする。
【００６８】
次に、ステップ１０４で、一時的状態マシン４によりＵＩ上にダイアログを表示する。このダイアログの表示処理では、第１実施の形態と同様に、アプリケーション実行環境８が提供するＡＰＩをコールして、画面上にダイアログを表示する。
【００６９】
次に、ステップ１０５で、一時的状態マシン４をＵＩイベント待ち状態に遷移させて、イベントハンドラ２をリターンし、これによりＣＰＵの実行権限をアプリケーション１から解放させる。
【００７０】
その後、ステップ１０６で、ユーザによりキー操作されたらダイアログを閉じる。この際、アプリケーション実行環境８はダイアログを画面から消去し、ユーザの選択に応じた情報を伴ったＵＩイベントを発生させる。
【００７１】
次に、ステップ１０７で、イベントハンドラ２はアプリケーション実行環境８から呼び出されてＵＩイベントを受け取る。
【００７２】
次に、ステップ１４６で、イベントハンドラ２はスタック１０から登録情報をポップする。ここで、スタック１０には、既に一時的状態マシン４が登録情報をプッシュしているが、その後にディフォルト状態マシン６がダイアログを表示してスタック１０に登録情報をプッシュしている場合もある。ここでは、一時的状態マシン４がプッシュした登録情報が取り出されるものとして説明する。
【００７３】
その後、図７のステップ１４７で、イベントハンドラ２は登録部３の中に登録情報が存在するか判定する。この判定処理は、第１実施の形態とは違って、ＵＩイベント自体には宛先を特定する情報が含まれていないので、スタック１０からポップされた情報によって登録情報の存在を判定する。
【００７４】
ステップ１４７での判定の結果、登録情報が存在する場合はステップ１１０へ進み、登録情報が存在しない場合はステップ１１２へ進む。
【００７５】
ステップ１１０では、取り出した登録情報が有効状態にあるかどうか判定する。すなわち、登録情報が登録された時点では有効状態であっても、後の処理によって無効状態に変更されている場合があるので、取り出した登録情報が有効状態にあるかを判定する。この判定の結果、登録情報が有効状態であればステップ１１１へ進み、無効状態であればそのＵＩイベントは無視して、このフローを終了する。
【００７６】
ステップ１４７での判定の結果、登録情報が存在しない場合は、ステップ１１２で、発生したＵＩイベントをディフォルト状態マシン６へ配送する。つまり、イベントハンドラ２は、ディフォルト状態マシン６のイベントＩ／Ｆ関数７をコールし、ディフォルト状態マシン６がＵＩを使用する場合には、登録部３とスタック１０とに登録をしておく必要があるが、ディフォルト状態マシン６にとって予期していないＵＩイベントであった場合は無視して、その後このフローを終了する。
【００７７】
ステップ１１０での判定の結果、取り出した登録情報が有効状態にあれば、ステップ１１１で、その登録情報に基づいて特定される一時的状態マシン４にＵＩイベントを配送する。このため、イベントハンドラ２は、有効状態の登録情報から一時的状態マシン４のインスタンスのアドレスと、イベントＩ／Ｆ関数５のアドレスとを割り出し、イベントとインスタンスのアドレスとを引数にセットし呼び出す。この呼び出しによって一時的状態マシン４はＵＩとのインタラクションを完了し、処理を続行する。処理の続行の結果、所定の関数の実行処理が完了すると、ステップ１４８へ進む。
【００７８】
ステップ１４８では、一時的状態マシン４が求めた所定の関数の戻り値をスクリプト実行コンテキスト１１のスタックに渡す。スタックマシンは、関数がリターンした際の戻り値をスタックに積んでおくので、これと同様の動作を行わせるためである。
【００７９】
次に、ステップ１４９で、スクリプト実行コンテキスト１１に宛てて再開イベントを発生する。この再開イベントは、アプリケーション実行環境８のＡＰＩをコールすることによって発生し、その発生したイベントはアプリケーション１用の待ち行列につながれる。
【００８０】
次に、ステップ１５０で、一時的状態マシン４の処理を完了して、一時的状態マシン４を削除する。これにより、ＵＩイベントを配送していたイベントハンドラ２はリターンし、ＣＰＵの実行権限はアプリケーション１から解放される。
【００８１】
次に、ステップ１５１で、再開イベントによってアプリケーション実行環境８によりイベントハンドラ２を呼び出し、イベントハンドラ２によりそのイベントがスクリプト実行コンテキスト１１宛であることを識別して、スクリプト実行コンテキスト１１のイベントＩ／Ｆ関数１２を呼び出す。これにより、スクリプト実行コンテキスト１１は、待ち状態から実行状態に遷移してスクリプトの実行を再開する。
【００８２】
その後、ステップ１５２で、スクリプトの実行が完了したら、スクリプト実行コンテキスト１１をアイドル状態に遷移させて、このフローを終了する。
【００８３】
次に、図８を参照して、一時的状態マシン４を強制削除する場合の処理を説明する。先ず、ステップ１６０で、イベントハンドラ２の登録部３に一時的状態マシン４の登録情報が存在するか判定する。本実施の形態の場合には、登録情報がスタック１０に貯められているので、スタック１０の登録情報を検索する。なお、スタック１０には、登録情報のインデクスを貯めておき、そのインデクスで指定される位置のテーブルに登録情報を格納しておくことも可能であり、その場合にはテーブルを検索する。
【００８４】
このステップ１６０での判定の結果、登録情報が存在している場合は、ステップ１６１で、存在していた一時的状態マシン４の登録情報を無効状態にした後、ステップ１２２で一時的状態マシン４を強制削除し、登録情報が存在していないと判定された場合は、直接、ステップ１２２で一時的状態マシン４を強制削除して、このフローを終了する。
【００８５】
すなわち、登録情報はスタック１０に貯められているので、ステップ１６１では、その中の一時的状態マシン４に関するものを全て無効状態にする。なお、スタック１０には、登録情報のインデクスを貯めておき、そのインデクスで指定される位置のテーブルに登録情報を格納しておく構成の場合には、テーブル内の登録情報を無効状態にするだけで、スタック１０の中の一時的状態マシン４に関するもの全てを無効状態にすることができる。
【００８６】
このように、スタック１０における一時的状態マシン４の登録情報を無効状態としても、スタック１０には登録情報が残っているので、イベントハンドラ２がＵＩイベントを受け取った際、それを配送せずに無視しても、アプリケーション実行環境８が管理しているダイアログスタックの通りに、イベントを適切な宛先に配送することができる。
【００８７】
本実施の形態では、スタック１０を設けることで、スタック１０にある登録情報に基づいてＵＩイベントを適切な関数に配送することができ、また、スクリプト実行コンテキスト１１を設けることで、スクリプト実行中にスクリプトがＵＩとインタラクションすることが可能となる。
【００８８】
（第３実施の形態）
図９および図１０は本発明の第３実施の形態に係るデジタル放送受信装置を説明するもので、図９はデジタル放送受信装置の概略構成を示すブロック図であり、図１０（ａ）乃至（ｃ）は図９に示す表示部における画面表示例を示す図である。
【００８９】
図９に示すデジタル放送受信装置は、本発明によるイベント配送方法を実施するもので、全体の動作を制御するＣＰＵを含む制御手段である制御部３１、イベント駆動型アプリケーションを含む各種のプログラムを格納する記憶手段であるＲＯＭ３２、処理上のデータを保持するＲＡＭ３３、ブックマーク保存用のフラッシュ（Ｆｌａｓｈ）ＲＯＭ３４、表示手段である表示部３５、デジタル放送受信手段であるデジタル放送受信部３６、キー入力部３７、オーディオ部４０およびスピーカ３８を有しており、制御部３１、ＲＯＭ３２、ＲＡＭ３３、フラッシュＲＯＭ３４、表示部３５およびデジタル放送受信部３６はバス３９に接続されている。
【００９０】
デジタル放送は、デジタル放送受信部３６で受信・復調され、さらに映像情報および音声情報が復号されて、映像情報が表示部３６に表示され、音声情報がオーディオ部４０を経てスピーカ３８から出力される。
【００９１】
表示部３６には、通常、図１０（ａ）に示すように、映像領域４１、ＢＭＬ領域４２および右ソフトメニュー４３が表示される。なお、右ソフトメニュー４３には、メニュー呼び出し機能が登録されている。
【００９２】
図１０（ａ）に示すように放送を受信して表示している間に、保存できるブックマークが存在すると、図１０（ｂ）に示すようにアイコン４４が表示され、左ソフトメニュー４５に保存機能が登録される。
【００９３】
ここで、ユーザが左ソフトメニューキーを押下すると、ブックマークの保存が開始される。この処理は、スクリプトによって実行され、この際に対応する状態マシンが一時的に確保されるとともに、イベントハンドラに状態マシンが登録されて、一時的状態マシンによる処理、すなわちブックマークの保存処理が実行される。
【００９４】
このスクリプト実行中に、保存用のフラッシュＲＯＭ３４が一杯の場合には、図１０（ｃ）に示すようにダイアログ４６が表示されて、例えば「メモリが一杯です  古いブックマークを消去しますか？」というメッセージが表示され、左ソフトメニュー４７にはＯＫ機能が、右ソフトメニュー４８にはキャンセル機能が割り当てられている。ここで、ユーザが何れかのキーを操作すると、イベントハンドラに前記の状態マシンが登録されていれば、そのＵＩイベントが当該状態マシンに配送されてダイアログ４６が閉じ、図１０（ａ）の状態に戻る。
【００９５】
このように、本実施の形態によれば、デジタル放送の受信において擬似オブジェクトがＵＩ上にダイアログを出し、ユーザに選択させることができるので、使い勝手を向上することができる。
【００９６】
なお、本発明は、上記実施の形態に限定されるものではなく、幾多の変更または変形が可能である。例えば、本発明によるイベント配送方法は、デジタル放送の受信装置に限らず、ＵＩを有するスクリプトを実行するイベント駆動型アプリケーションを採用する各種の機器に広く適用することができる。
【図面の簡単な説明】
【００９７】
【図１】本発明の第１実施の形態を説明するイベント駆動型アプリケーションの概念的構成を示すブロック図である。
【図２】第１実施の形態の動作を説明するフローチャートである。
【図３】同じく、第１実施の形態の動作を説明するフローチャートである。
【図４】本発明の第２実施の形態を説明するイベント駆動型アプリケーションの概念的構成を示すブロック図である。
【図５】図４に示すスタックにおける動作を説明する概念図である。
【図６】第２実施の形態の動作を説明するフローチャートである。
【図７】同じく、第２実施の形態の動作を説明するフローチャートである。
【図８】同じく、第２実施の形態の動作を説明するフローチャートである。
【図９】本発明の第３実施の形態に係るデジタル放送受信装置の概略構成を示すブロック図である。
【図１０】図９に示す表示部における画面表示例を示す図である。
【符号の説明】
【００９８】
１  イベント駆動型アプリケーション
２  イベントハンドラ
３  登録部
４  一時的状態マシン
５  イベントＩ／Ｆ関数
６  ディフォルト状態マシン
７  イベントＩ／Ｆ関数
８  アプリケーション実行環境
９  ＯＳ
１０  スタック
１１  スクリプト実行コンテキスト
１２  イベントＩ／Ｆ関数
３１  制御部
３２  ＲＯＭ
３３  ＲＡＭ
３４  フラッシュＲＯＭ
３５  表示部
３６  デジタル放送受信部
３７  キー入力部
３８  スピーカ
３９  バス
４０  オーディオ部
【図１】
2007148874.tif 000003
【図２】
2007148874.tif 000004
【図３】
2007148874.tif 000005
【図４】
2007148874.tif 000006
【図５】
2007148874.tif 000007
【図６】
2007148874.tif 000008
【図７】
2007148874.tif 000009
【図８】
2007148874.tif 000010
【図９】
2007148874.tif 000011
【図１０】
2007148874.tif 000012