DSPLY (メッセージ表示)

自由形式構文 DSPLY{(E) } {メッセージ {メッセージ待ち行列 {応答 } } }
コード 演算項目 1 演算項目 2 結果フィールド 標識
DSPLY (E) メッセージ メッセージ待ち行列 応答 _ ER _

DSPLY 命令では、プログラムがそのプログラムを要求したディスプレイ・ ワークステーションと通信することができます。 メッセージ応答、または両方のオペランドが指定される必要があります。この命令では、メッセージを表示し、応答を受け入れることができます。

表示されるメッセージの作成には、メッセージ・オペランドおよび場合により応答 オペランドの値が使用されます。 メッセージ は、その値を使用して表示されるメッセージを作成するフィールド名、リテラル、名前付き定数、テーブル名、または配列要素にすることができます。自由形式演算では、メッセージ・オペランドは式にすることができます (式が括弧で囲まれている場合)。メッセージ・オ ペランドには、*M に続けて、メッセージ・ファイル QUSERMSG から検索されるメッセージを識別するメッセージ識別コードも入れることができます。 別のメッセージ・ファイルを使用するためには、OVRMSGF コマンドを使用し ます。 QUSERMSG は、メッセージを受け取るジョブのライブラリー・リストに入ってい るライブラリー中になければなりません。

メッセージ識別コードは、3 桁の英字と 4 桁の数字で構成される 7 桁の長 さでなければなりません (例えば *MUSR0001、これはメッセージ USR0001 が 使用されることを意味しています)。

これを指定する場合、メッセージ待ち行列 オペランドは、文字フィールド、リテラル、名前のついた定数、テーブル名、または配列要素にすることができます。 この値は、メッセージを受け取るためのオブジェクト (オプションで応答の送信も可能) の記号名になります。 プログラム・メッセージ待ち行列以外の待ち行列名を、メッセージ待ち行列 オペランドに含まれる値にすることができます。 この待ち行列をプログラムの実行時に使用するには、その前にオペレーティング・システムに宣言する必要があります。 (待ち行列の作成方法については、「CL プログラミング」を参照してください。) 定義済みの待ち行列には次の 2 つがあります。

待ち行列
QSYSOPR
メッセージはシステム操作員に送られます。 DSPLY 命令で直ちにシステム 操作員にメッセージを表示できるようにするためには、QSYSOPR メッセージ待 ち行列の重大度レベルがゼロ (00) でなければならないことに注意してくださ い。
*EXT
メッセージは外部メッセージ待ち行列に送られます。
注: バッチ・ジョブでメッセージ待ち行列 の値が指定されていない場合、デフォルト値は QSYSOPR になります。対話式ジョブの場合には、デフォルト値は *EXT です。

応答 オペランドは任意指定です。指定した場合には、ここに応答が入ります。 応答 には応答が入るフィールド名、テーブル名、または配列要素を入れることができます。 データが入力されなければ、応答 は変わりません。 自由形式仕様書において、応答を指定してメッセージ待ち行列は指定しないようにするには、メッセージ待ち行列' ' を指定してください。

自由形式演算仕様書でコーディングされる場合、完全修飾名は結果フィールド・オペランドとして指定すること ができ、式は演算項目 1 および演算項目 2 として使用することができます。しかし、オペランドが完全修飾名よりも複雑である場合には、 式は括弧で囲む必要があります。

DSPLY 例外 (プログラム状況コード 333) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 命令でエラーが発生した場合、例外は 指定された方法によって処理されます。 エラー処理の詳細については、プログラム例外/エラーを 参照してください。

DSPLY 命令をメッセージ・オペランドにメッセージ識別コードを入れないで 指定した場合には、この命令の機能は次のようになります。
  • メッセージ・オペランドが指定され、応答 オペランドが指定されない場合、メッセージ・オペランドの内容が表示されます。 プログラムは、ワークステーションで 形式を表示するためにパラメーター RSTDSP (*NO) を指定した表示装置ファイ ルが使用されていない限り、応答を待機しません。 その後でプログラムは、ユーザーが実行キーを押すまで待機します。
  • メッセージ・オペランドが指定されずに応答 オペランドが指定されている場合、応答 オペランドの内容が表示され、プログラムはユーザーが応答のためにデータを入力するのを待ちます。 この応答は応答 オペランドに入れられます。
  • メッセージ・オペランドと応答 オペランドの両方が指定されている場合は、それらの内容が結合されて表示されます。 プログラ ムはユーザーが応答のためにデータを入力するまで待機します。 この応答は結果フィー ルドに入れられます。
  • メッセージについてのヘルプを要求すると、必要なデータのタイプおよび 属性と 正常に実行されなかった試行回数を知ることができます。

    表示可能な情報の最大長は 52 バイトです。

メッセージ・オペランドでメッセージ識別コードが指定されていない DSPLY 命令によって書き出されるレコードの形式は次のとおりです。

図 1. DSPLY 命令のレコード様式. 1表示可能な情報の最大長は 52 バイトです。

メッセージ・オペランドにメッセージ識別コードを入れた DSPLY 命令を指定した場合には、この命令の機能は次のようになります。 すなわち、メッセージ・オペランドによって識別されるメッセージが QUSERMSG から検索され、そのメッセージが表示されて、プログラムは (応答 オペランドが指定されている場合に) ユーザーがデータを入力して応答するまで待機します。この応答は結果フィー ルドに入れられます。

メッセージに応答する場合には、次のことに留意してください。
  • 表示装置に送られた非浮動数値フィールドは右寄せされてゼロが消去 されます。
  • 長さが結果フィールドの桁数より大きい非浮動数値 フィールドが入力されて右端の文字がマイナス符号 (-) でない場合には、 エラーが検出されて 2 回目の待機状態になります。 ユーザーはこのフィールドに入力し直さなければなりません。
  • 浮動値は、外部表示表現で入力されます。 この値は、4 バイト浮動フィールドの場合には 14 桁より長くなっては ならず、8 バイト浮動フィールドの場合には 23 桁より長くなっては なりません。
  • 図形データ、UCS-2 データ、または文字データを入力する場合には、その長さは受け取りフィールドの長さと等しいかまたはそれ以下でなければなりません。
  • 結果のフィールドが可変長の場合、その長さはユーザーが入力した長さに設定されます。
  • 日付、時刻、またはタイム・スタンプ・フィールドが入力される場合には、そ の形式および区切り記号は結果フィールドの形式および区切り記号と一致しな ければなりません。 形式または区切り記号が一致しないか、または値が正しくない場合 (例えば、1999/99/99 の日付) には、エラーが検出されて 2 回目の待機状態になります。 ユーザーはこのフィールドに入力し直さなければなりません。
  • DSPLY 命令によって、ワークステーション・ユーザーは最高 5 回 までメッセージへの応答を試みることができます。 5 回目の試みが失敗した 後、DSPLY 命令は失敗します。DSPLY 命令にメッセージ・オペランドで指定されたメッセージ識別コードがない場合、ユーザーはメッセージに関するヘルプを要求して、期待されている応答のタイプと属性を知ることができます。
  • システム操作員待ち行列 (QSYSOPR) にヌルの応答を入力するためには、文字 *N を入力して実行キーを押さなければなりません。
  • 図形フィールド、UCS-2 フィールド、または文字フィールドには、すべての文字が入力された後で右側にブランクが埋められます。
  • UCS-2 フィールドは、1 バイト文字として表示、入力されます。
  • 数値フィールドは、すべての文字が入力された後で右寄せされて左側にゼ ロが埋められます。
  • 小文字は大文字に変換されません。
  • 演算項目 1 または結果フィールドが図形データ・タイプの場合には、表示 される時に SO/SI で囲まれます。 SO/SI は、入力では図形の結果フィールドに 割り当てられる値から除かれます。
  • 浮動フィールドは、外部表示表現で表示されます。 浮動値は、数値リテラルまたは浮動リテラルとして入力することができます。 応答を入力するときは、浮動値を正規化する必要はありません。

詳細については、メッセージ命令を参照してください。

図 2. DSPLY 命令コードの例
   /free
       // Display prompt and wait for response:
       dsply prompt '' result;
       // Display string constructed in an expression:
       dsply ('Length of name is ' + %char(%len(str)) + ' bytes.');
   /end-free