日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 部:概論
第 1 章:日本語SMG (SMG$)の概要
第 2 章:日本語 SMG の出力操作
第 3 章:日本語 SMG 入力操作
第 4 章:日本語 SMG の高度な機能
第 5 章:フォーリン・ターミナルのサポート
第 6 章:日本語 SMG を使用したプログラム開発
第 7 章:日本語 SMG ルーチンの呼び出しの例
第 2 部:リファレンス・セクション
第 8 章:日本語 SMG リファレンス
コマンド一覧
索引
PDF
OpenVMS ホーム
日本語 OpenVMS

日本語 OpenVMS
日本語画面管理ライブラリ 利用者の手引き


目次 索引

第 4 章
日本語 SMG の高度な機能

日本語 SMG には,次のような高度な機能があります。

  • 非同期イベントをトラップする。

  • サブプロセス内でコマンドを生成し,実行する。

  • 物理カーソルを移動する。

  • 終了時に画面を整理する。

この後の節では,これらの高度な機能について説明します。

  注意
日本語 SMG は,漢字ターミナルが完全に日本語 SMGの管理下にあることを仮定しています。したがって,アプリケーションは,日本語 SMG ルーチンと日本語 DIGITAL GKS や日本語 FMS のような画面管理用製品を同時に呼ぶべきではありません。

日本語 SMG はリエントラントではありません。したがって複数のプロセスが,1 つのターミナルで同時に操作を行うために,日本語 SMG ルーチンを呼び出そうとした場合,予想できない結果を招く恐れがあります。アプリケーションが複数のプロセスを持ち,画面修正が必要な場合は,一方のプロセスは日本語 SMG ルーチンを呼び出し,もう一方のプロセスはルーチンを呼び出しているプロセスに対して,メッセージを送る必要があります。それによって,プロセスは適切な日本語 SMG ルーチンを呼び出すことができます。



次に示す3種類の非同期イベントは画面のイメージを破壊する可能性があります。

  • ブロードキャスト・メッセージ

  • 要求されていない入力

  • アウト・オブ・バンド非同期システム・トラップ

この後の節では,これらの操作を制御する方法について説明します。

  注意
日本語 SMG は AST リエントラントではありません。したがって,この章で説明する日本語 SMG ルーチンを呼び出すプログラムは,必要な同期処理を実行しなければなりません。



通常,ブロードキャスト・メッセージ ( たとえば, MAIL の通知やオペレータ・メッセージなど ) は,いつでもターミナル画面に表示される可能性があり,その結果,画面イメージは破壊されます。 SMG$SET_BROADCAST_TRAPPING ルーチンを使用すれば,指定された漢字ターミナル ( ペーストボード ) にブロード・キャストされたメッセージを受け取ることができ,さらに,ブロードキャスト・メッセージが受け取られるときに必ず呼び出される AST ルーチンを指定できます。ユーザが指定する AST ルーチンは, SMG$GET_BROADCAST_MESSAGE ルーチンを呼び出すことにより,ブロードキャスト・メッセージをアクセスできます。

SMG$SET_BROADCAST_TRAPPING ルーチンを呼び出すときに AST ルーチンを指定したかどうかとは無関係に,ブロードキャスト・メッセージを受信したかどうかということはいつでも確認できます。ブロードキャスト・メッセージの受信を確認する場合には, SMG$GET_BROADCAST_MESSAGE ルーチンを呼び出します。

4.1.2 要求されていない入力

SMG$ENABLE_UNSOLICITED_INPUT ルーチンは,要求されていない入力の存在を検出します。このルーチンは入力文字を読み込むわけではなく,単に SMG$READ_COMPOSED_LINE, SMG$READ_KEYSTROKE,SMG$READ_STRING, SMG$READ_VERIFY ルーチンを使用して読み込み操作を実行しなければならないことをアプリケーションに通知するために,AST ルーチンを呼び出すだけです。要求されない入力を実際に読み込むのはユーザの役割です。

4.1.3 アウト・オブ・バンド AST

SMG$SET_OUT_OF_BAND_ASTS ルーチンは,[Ctrl/Y][Ctrl/C][Ctrl/O] などのアウト・オブ・バンド文字を受け取るための方法を提供します。このルーチンを使用すれば,どの文字をアウト・オブ・バンド文字として取り扱うかを指定でき,また,これらの文字が入力されたときに呼び出される AST ルーチンも指定できます。

4.2 サブプロセス

日本語 SMG では,サブプロセスを使って,アプリケーションから DCL コマンドを実行することができます。各仮想ディスプレイに対して,サブプロセスは1つだけ作成できます。

4.2.1 サブプロセスの作成

サブプロセスは SMG$CREATE_SUBPROCESS ルーチンを使用して作成されます。このルーチンは DCL サブプロセスを生成し,そのサブプロセスをユーザが指定した仮想ディスプレイに対応づけます。サブプロセスは SET NOVERIFY と SET NOON の DCL コマンドを使用して初期化されます。プロセスを生成するには,BYTLM の値が少なくとも5000で, PRCLM の値が少なくとも 1 でなければなりません。日本語 SMG は,サブプロセスを生成する前に,十分なリソースが残されているかどうかを確認します。

4.2.2 サブプロセスの削除

サブプロセス・コマンドを実行した後, SMG$DELETE_SUBPROCESS ルーチンを使用してサブプロセスを削除できます。このルーチンを呼び出さずに処理を終了した場合には,日本語 SMG ルーチンはサブプロセスを削除するために終了ハンドラを使用します。しかし,このような日本語 SMG が提供する終了ハンドラを実行できないような状況があります。その場合には,次のコマンドを使用してサブプロセスを削除しなければなりません。

$ SHOW PROCESS/SUB
$ STOP/IDENT=xxxx



4.2.3 サブプロセス内でのコマンドの実行

SMG$EXECUTE_COMMAND ルーチンを使用すれば,作成したサブプロセス内で指定されたコマンドを実行できます。 SMG$CREATE_SUBPROCESS ルーチンで AST ルーチンが指定され,コマンドがバッファに登録されている場合には,SMG$EXECUTE_COMMAND ルーチンは,指定されたコマンドをバッファに登録し,制御を戻します。コマンドの実行が終了すると,コマンドの状態によってユーザが指定した AST ルーチンが起動されます。 SMG$CREATE_SUBPROCESS ルーチンで AST ルーチンが指定されずコマンドがバッファに登録されていない場合には, SMG$EXECUTE_COMMAND ルーチンはコマンドが実行がされるのを待ち,終了した後,コマンドの状態を戻します。

実行するコマンド文字列を指定する場合には, DCL コマンドの 1 文字目として "$" を指定しなければなりません。日本語 SMG は,"$" から始まらないコマンド文字列を前のコマンドの入力データとして解釈します。コマンドとその出力は,コマンドが実行されるときに指定された仮想ディスプレイに表示されます。 SPAWN コマンド,GOTO コマンド,および LOGOUT コマンドをコマンド文字列として使用することはできず,これらのコマンドを使用した場合には,予測できない結果を生じます。

また,入出力はターミナル・ドライバを通じてではなく,メールボックスを使用して実行されるため,[Ctrl/C][Ctrl/Y][Ctrl/Z] などの単一文字コマンドはまったく効果がありません。 [Ctrl/Z] をサブプロセスに渡すには, flags 引数として SMG$M_SEND_EOF を使用しなければなりません。

4.3 カーソルの移動

日本語 SMG では,物理画面の指定された位置にカーソルを移動できます。この操作は SMG$SET_PHYSICAL_CURSOR ルーチンを使用して実行します。しかし,カーソルをペーストボードの画面境界の外部に移動しようとした場合には,エラーが返されます。

4.4 終了ハンドラ

日本語 SMG は,イメージ終了の前に起動される終了ハンドラを提供しています。このハンドラは,現在のイメージに関連するすべてのペーストボードと仮想キーボードを削除し,ターミナル属性を再設定します。日本語 SMG の終了ハンドラは,ユーザが指定した終了ハンドラの前に起動される場合もありますし,後で起動される場合もあります。したがって,ユーザ指定の終了ハンドラの内部からペーストボードや仮想ディスプレイを削除すべきではありません。ペーストボードや仮想ディスプレイは,日本語 SMG の終了ハンドラによってすでに削除され,その識別子の割り当てが取り消されている可能性があるからです。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.