このドキュメントでは、Natural IMS インターフェイスのサービスモジュールについて説明します。
次のトピックについて説明します。
サービスモジュールは IMS/TM 固有の機能を実行します。 これらのモジュールは、標準的な Natural CALL
インターフェイスを使用して、Natural プログラム内から呼び出すことができます。 サンプルプログラムは、Natural INPL
によってライブラリ SYSEXTP
にロードされます。
このセクションでは、すべてのサービスモジュールについてアルファベット順に詳しく説明します。 この説明には、利用可能なパラメータのリストやモジュール関連のサンプルプログラムの名前も含まれています。
モジュール CMCMMND
は、IMS オペレータコマンドを発行し、応答セグメントを Natural ユーザープログラムに返します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Command |
入力 | ||
Command length |
(B4) | 入力 | |
Reply |
出力 | ||
Length of reply area |
(B4) | 入力 |
コマンドエリアに含まれているオペレータコマンドは、指定した長さで IMS に発行されます。
ユーザーが応答の長さを 0 以外に設定した場合、IMS からの応答セグメントは、利用可能な最大の長さで応答エリアに移動されます。 応答エリアに最低 2 バイトの長さがある場合、最初の 2 バイトには、コマンドコールを発行した後の IMS ステータスコードが含まれます。
REPLGTH
フィールドの右端の 2 バイトには、REPLY
フィールドに移動された応答全体の有効な長さが格納されます。
IMS からの応答を切り捨てる必要がある場合、REPLGTH
フィールドの左端のバイトを X'80'
と設定することでこの処理を指定します。
サンプルプログラム:NIPSCMND
モジュール CMDEFSW
は、Natural トランザクションコードへの遅延トランザクション切り替えを実行します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Trancode |
入力 |
次の端末 I/O で出力は端末に送信され、この端末からの次の入力は、パラメータメッセージとして渡されたトランザクションコードで処理されます。
モジュール CMDEFSWX
は、Natural 以外のトランザクションコードへの遅延切り替えを実行します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Trancode |
入力 | ||
Message |
入力 | ||
Message length |
入力 | ||
MOD name |
入力 |
次の端末 I/O で、指定した MOD 名
で指定したメッセージが挿入され、Natural セッションは終了されます。
新しいトランザクションコードが Natural トランザクションコードである場合、パラメータとして渡されたメッセージと MOD 名
は無視され、CMDEFSWX
は CMDEFSW
と同じように動作します。
サンプルプログラム:NIPSDEFX
代替 PCB にメッセージを挿入しないことを除けば、モジュール CMDIRNMX
は CMDIRSWX
と同じ機能です。 したがって、ユーザーが指定する必要があるパラメータは Trancode
のみです。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Trancode | 入力 |
また CMDIRNMX
を使用すると、別の Natural トランザクションコードに直接切り替えることができます。この処理が可能である理由は、この場合、入力メッセージとして CLEAR キーがデフォルトで Natural に渡されるからです。
Natural 以外のトランザクションコードに切り替える場合は、代わりに TERMINATE
ステートメントとサービスモジュール CMTRNSET
を使用することを強くお勧めします。
CALL 'CMTRNSET' TRANCODE /* set transaction code */ TERMINATE /* terminate Natural and call TRANCODE */
代替 PCB にメッセージを挿入しないことを除けば、モジュール CMDIRNMZ
は CMDIRSWZ
と同じ機能です。 したがって、ユーザーが指定する必要があるパラメータは Trancode
のみです。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Trancode |
入力 |
モジュール CMDIRSWX
は、別の会話型トランザクションへの直接切り替えを実行し、この新しいトランザクションに渡すメッセージを指定します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Trancode |
入力 | ||
Message |
入力 | ||
Message length |
(B4) | 入力 |
次の端末 I/O で、代替 PCB に対して変更コールが実行され、宛先が Trancode
フィールドの値に設定されます。 次に SPA とメッセージが代替 PCB に挿入されます。
新しいトランザクションコードは、Natural のトランザクションコードであるか、Natural 以外のトランザクションコードであるかがチェックされます。
Natural 以外のトランザクションコードの場合、Natural セッションが終了します。
Natural トランザクションコードの場合、CLEAR キーが入力メッセージとして Natural に渡されます。つまり、Natural は端末ユーザーが CLEAR キーを押した場合と同様に動作します。 新しいトランザクションコードのタイプは自動的に保持されます。
Natural 以外のトランザクションコードに切り替える場合は、代わりに TERMINATE
ステートメントとサービスモジュール CMTRNSET
を使用することを強くお勧めします。
CALL 'CMTRNSET' TRANCODE /* set transaction code */ TERMINATE 0 MESSAGE /* terminate Natural and call TRANCODE with MESSAGE */
メッセージ MESSAGE は、Natural 変数 Message
の長さでトランザクションコード Trancode
に渡されます。 TERMINATE
ステートメントのリターンコードはゼロになる必要があります。 それ以外の場合、Natural セッションは終了エラーメッセージ NAT9987 で終了し、トランザクションコードの切り替えは実行されません。
サンプルプログラム:NIPSDIRX
モジュール CMDIRSWZ
は、CMDIRSWX
と同じ機能です。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Trancode |
入力 | ||
Message |
入力 | ||
Message length |
(B4) | 入力 |
CMDIRSWX
との違いは、Natural 以外のトランザクションコードに切り替える場合に現在の Natural セッションが終了されないことです。 この動作の目的は、次のとおりです。
特定の Natural セッションが Natural 以外のトランザクションコードに制御を渡しますが、このセッションは終了しません。
Natural 以外のトランザクションは端末 I/O を実行し、次に元の Natural トランザクションに再び切り替えてデータを SPA に渡します。
Natural トランザクションは、新しいセッションを開始しないで、一時的に放置状態になっても、以前のセッションをそのまま維持します。つまり、スワッププールからロールスロットが取得され、既存のセッションで処理を続行できるように制御が Natural に渡されます。
Natural 以外のトランザクションコードは、メッセージ LLZZD
を渡す必要があります。この場合、LL=H'0005'
、ZZ=X'0000'
、および D=X'6D'
は、Natural に対して CLEAR キーが押された状態をシミュレートします。 CLEAR キーに反応するように Natural プログラムを設定すると、呼び出された Natural 以外のトランザクションが制御を取り戻したことがプログラムで認識され、Natural 以外のトランザクションが準備したデータをプログラムが取得して、それ以降の処理で使用することができます。
切り替えるトランザクションコードが Natural トランザクションコードである場合、CMDIRSWZ
は使用することができません。
サンプルプログラム:NIPSDIFS
モジュール CMDISPCB
は、PCB の内容を取得するために使用します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
PCB number |
(B4) | 入力 | |
Receiving area |
出力 | ||
Area length |
(B4) | 入力 |
コールの実行後、受信エリアには、要求した長さと数で PCB の内容が格納されます。 要求した PCB が現在の PCB リストに含まれていることを確認するチェックが実行されます。 最初の PCB は PCB 番号 1 であり、第 2 の PCB
は PCB 番号 2 となります。無効な番号を指定すると、フィールド PCB number
が X'FFFFFFFF'
に設定され、アプリケーションプログラムにはそれ以上の情報が渡されません。
サンプルプログラム:NIPSPCBD
モジュール CMEMOD
は、Natural セッションの正常な終了時に、特定の LTERM
に対して MOD name
をダイナミックに変更することができます。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
MOD name |
(A8) | 入力 |
セッションの正常終了時に、環境依存のインターフェイスによって、MOD name
パラメータに値が格納された MOD 名で、メッセージ X'00060000403F'
が IOPCB に挿入されます。 この処理の目的は、端末ユーザーが端末で作業を続けられるように、意味を理解できる画面(例えば、一般的なメニューなど)を表示することです。
モジュール CMGETMSG
は、メッセージキューから次のメッセージを読み取ります。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Message area |
出力 | ||
Message area length |
(B4) | 入力 |
受信したメッセージがメッセージエリアに収まるかどうかを確認するために、長さがチェックされます。 LLZZ バイトを含めて、メッセージはメッセージエリアに移動されます。 メッセージがそれ以上ない場合、LL=0
がメッセージエリアに移動されます。
メッセージがメッセージエリアに収まらない場合、対応するエラーメッセージが返されます。
サンプルプログラム:NIPSGETM
および NIPSOBMP
モジュール CMGETSEG
は、メッセージキューから現在のメッセージの次のセグメントを読み取ります。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Message area |
入力 | ||
Message area length |
(B4) | 入力 |
受信したメッセージがメッセージエリアに収まるかどうかを確認するために、長さがチェックされます。 LLZZ バイトを含めて、メッセージセグメントはメッセージエリアに移動されます。 メッセージセグメントがそれ以上ない場合、LL=0
がメッセージエリアに移動されます。
メッセージがメッセージエリアに収まらない場合、対応するエラーメッセージが返されます。
サンプルプログラム:NIPSOBMP
モジュール CMGETSPA
は、指定されたオフセットから開始して、要求された長さで SPA から受信エリアにデータを転送します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Offset |
(B4) | 入力 | |
Length |
(B4) | 入力 | |
Area |
(B4) | 出力 |
サンプルプログラム:NIPSGSPA
および NIPSPSPA
モジュール CMIMSID
を使用すると、Natural プログラムは、現在スケジュールが設定されている IMS システムの MVS サブシステム ID を取得できます。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
IMSID |
(A4) | 出力 |
コールの実行後に、フィールド IMSID
には、現在スケジュールが設定されている IMS システムの MVS サブシステム ID が格納されます。
モジュール CMIMSID
は、内部の IMS コントロールブロックに依存しています。 したがって、これは IMS のリリースによって異なる機能であり、可能な場合には常に更新されます。
モジュール CMIMSINF
は、システム環境情報を提供します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
IMSID |
(A4) | 出力 | IMS ID。 |
SUFFIX |
(A2) | 出力 | プリロードの接尾辞。 |
APPLGNAM |
(A8) | 出力 | アプリケーショングループ名。 |
APPLNAM |
(A8) | 出力 | アプリケーション名。 |
NRENT |
(B4) | 出力 | プリロードされるリエントラントモジュールの数。 |
NNONR |
(B4) | 出力 | プリロードされる非リエントラントモジュールの数。 |
CMIMSINF
も、IMS のリリースに応じて異なるモジュールです。
サンプルプログラム:NIPSINF
モジュール CMPCBADR
は、論理名で識別された PCB のアドレスを返します。 PSB 名も Natural プログラムに返されます。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
PSB name |
(A8) | 入力 | |
PCB name |
(A8) | 入力 | |
PCB address |
(B4) | 入力 |
コールの実行後、フィールド PCBADR
には PCB のアドレスが格納されます。このアドレスは、テーブルエントリにある論理名 PCBNAME
によってテーブルモジュール内で識別された PCB のアドレスであり、現在スケジュールが設定されているトランザクションコードに対応しています。 そのトランザクションコードに対して論理名が存在しない場合、PCBADR
フィールドで X'FFFFFFFF'
が返されます。 いずれの場合でも、フィールド PSBNAME
には、現在スケジュールが設定されている PSB の名前が格納されます。
サンプルプログラム:NIPSPCBA
モジュール CMPRNTR
は、モジュール NIIIMSHC で設定されたデフォルトの印刷先を、パラメータとして渡された値に変更します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Destination |
(A8) | 入力 |
モジュール CMPRNTR
は、互換性保持の目的でのみ提供されています。Natural ステートメントの SET CONTROL
hdest-id
を使用することをお勧めします。
モジュール CMPUTMSG
を使用すると、長さを指定した任意の出力メッセージを IO-PCB に挿入することができます。このとき、MFS MOD name
を指定します。 こうすると、入力メッセージの発行元に、MFS フォーマットの出力メッセージを送り返すことができます。
CMPUTMSG
は、メッセージ長に指定されたバイト数のデータをメッセージエリアから取得し、指定された MOD name
でメッセージキューにこれらのデータを挿入します。 メッセージ長の制限はありませんが、データが環境依存インターフェイスの入力メッセージエリアに収まる必要があります。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Message area |
入力 | ||
Message length |
(B4) | 入力 | |
MOD name |
入力 |
空白以外のステータスコードが IO-PCB で返された場合、Natural エラーメッセージ NAT8272 が発行されます。このメッセージではステータスコードが変数として格納されています。
モジュール CMPUTSPA
は、指定された長さのデータを、指定されたオフセットで SPA に移動します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Offset |
(B4) | 入力 | |
Length |
(B4) | 入力 | |
Data |
入力 |
指定したオフセットが SPA 内の Natural Reserved Area(NRA)に含まれていないかどうか、チェックが実行されます。 含まれている場合は、リターンコード 4 が返されます。
サンプルプログラム:NIPSPSPA
モジュール CMQTRAN
は、トランザクションコードテーブルにある現在のエントリの内容を返します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Transaction code |
出力 | 実行しているトランザクションコード。 | |
Offset |
(B2) | 出力 | SPA での NRA のオフセット。 |
Length |
(B2) | 出力 | NRA の長さ。 |
Uoffset |
(B2) | 出力 | 未使用。 |
PSB name |
出力 | スケジュールが設定されている PSB の名前。 | |
Number of PCBs |
出力 | モジュール CMPCBADR を使用してアドレスを取得できる PCB の数。
|
セキュリティ上の懸念があるため、モジュール CMPCBADR
にユーザーが指定できる PCB の論理名は返されません。ユーザーが指定できる論理名は、システムによって通知されます。
サンプルプログラム:NIPSQTRA
モジュール CMQUEUE
は、指定された代替 PCB にメッセージを挿入します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Destination |
入力 | ||
Message |
入力 | ||
Message length |
(B4) | 入力 | |
TP PCB number |
(B4) | 入力 | 任意 |
このコールによって、即時変更コールが、指定された代替 PCB の宛先を、フィールド Destination に指定された値に設定します。これ以降、メッセージは指定されたメッセージ長で代替 PCB に挿入されます。
トランザクションコードは、データ長 8 で LLZZ バイトの後に挿入されます。
PURGE
呼び出しの発行後、制御は Natural プログラム内の次の命令に戻されます。
メッセージの最大長は、入力メッセージエリアのサイズです(通常、8000 バイト引く 12 バイト)。
使用する代替 PCB は、最後のオプションパラメータで指定します。 呼び出しに TP PCB number
を指定していない場合、NIMTRNTG
マクロの ALTPCB
パラメータで指定した代替 TP PCB が使用されます。
サンプルプログラム:NIPSQLOA
モジュール CMQUEUEX
を使用すると、IMS/TM 入力キューでキューイングするメッセージの内容を完全に制御できます。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Destination |
入力 | ||
Message |
入力 | ||
Message length |
(B4) | 入力 | |
TP PCB number |
(B4) | 入力 | 任意 |
このコールによって、即時変更コールが、指定された代替 PCB の宛先を、フィールド Destination に指定された値に設定します。これ以降、メッセージは LLZZ バイトの後、指定されたメッセージ長で代替 PCB に挿入されます。 CMQUEUE
との違いは、LLZZ バイトの後にトランザクションコードが挿入されないことです。
PURGE
呼び出しの発行後、制御は Natural プログラム内の次の命令に戻されます。 メッセージの最大長は、入力メッセージエリアのサイズです(通常、8000 バイト引く 12 バイト)。
使用する代替 PCB は、最後のオプションパラメータで指定します。 呼び出しに TP PCB 番号を指定していない場合、NIMTRNTG
マクロの ALTPCB
パラメータで指定した代替 TP PCB が使用されます。
サンプルプログラム:NIPSQUEX
モジュール CMSNFPRT
は、オンライン BMP の実行時に Natural メッセージの送信先とするデバイスの論理名を設定します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Printer name |
入力 |
CMSNFPRT
の呼び出し前に、Natural プロファイルパラメータ SENDER
を使用してデフォルトの出力先を定義します。
サンプルプログラム:NIPSOBMP
モジュール CMSVC13D
は、ユーザーアベンドコード U3962 で Natural セッションを終了し、ダンプを生成します。
パラメータ:なし
サンプルプログラム:なし
Natural セッションが正常に終了された場合、Natural IMS インターフェイスは、指定されたトランザクションコードへのプログラム間の直接的な切り替えを実行し、代替 PCB によって SPA を挿入します。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Trancode |
入力 |
サンプルプログラム:NIPSEOSS
モジュール NIIDDEFS
は、モジュール CMDEFSWX
によく似ています。 NIIDDEFS
を使用して外部トランザクションへの遅延切り替えを実行する場合、モジュール CMDIRSWZ の使用時と同様に、現在の Natural セッションは中断されます。 中断された Natural セッションは、CLEAR キーを含むメッセージを Natural に返信することでいつでも再開できます。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Transaction code |
入力 | 切り替え先のトランザクションコード。 | |
Message |
入力 | 外部トランザクションコードに送信されるメッセージ。 | |
Message length |
(B4) | 入力 | |
MOD name |
(A8) | 入力 | |
Transaction type |
(A4) | 入力 | 外部トランザクションが会話型の場合は A4 変数に文字列 CONV が格納され、外部トランザクションが非会話型の場合は A4 変数に文字列 NONC が格納されます。
|
リターンコード:
0 | OK |
---|---|
4 | メッセージ長が、環境テーブルに定義されたメッセージエリアのサイズよりも長くなっています。 |
8 | 会話型の Natural から非会話型の外部トランザクションへ、中断を伴う遅延切り替えを実行しようとしました。これは正常に実行できません。 |
12 | 第 5 のパラメータが無効です。値が CONV でも NONC でもありません。
|
サンプルプログラム:NIPSDEFS
モジュール NIIDPURG
にはパラメータがありません。 このモジュールは、NIIDQUMS
呼び出しと同じ代替 PCB を使用して PURGE
呼び出しを発行し、モジュール NIIDQUMS
で作成された複数セグメントメッセージを送信します。
リターンコード:4 バイトのリターンコードでは、そのうち 2 および 3 バイトがステータスコードになります。あるいは、リターンコードの値は 0 になります。
サンプルプログラム:NIPSQLMS
このモジュールは、複数セグメントメッセージを作成します。 これは基本的にモジュール CMQUEUE
と同じ機能ですが、異なる点は、NIIDQUMS
が PURGE
呼び出しを発行しないことです。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Destination |
入力 | ||
Message |
入力 | ||
Message length |
(B4) | 入力 | |
TP PCB number |
(B4) | 入力 | 任意 |
モジュール NIIDPURG
を使用する PURGE
呼び出しの発行は、ユーザーが行います。
使用する代替 PCB は、最後のオプションパラメータで指定します。 呼び出しに TP PCB 番号を指定していない場合、NIMTRNTG
マクロの ALTPCB
パラメータで指定した代替 TP PCB が使用されます。
サンプルプログラム:NIPSQLMS
外部トランザクションコードへの適切なトランザクション切り替えを実行するには、切り替え先の外部トランザクションコードのタイプを知っている必要があります。 このタイプを確認するには、特定用途のモジュール NIIDSETT
を使用することができます。 NIIDSETT
が使用されていない場合、外部トランザクションコードは、呼び出し元の Natural トランザクションコードと同じタイプであると判断されます。 タイプが異なっていた場合、予期しない結果になったり、セッションが異常終了したりします。
次のパラメータを使用できます。
名前 | フォーマット/長さ | タイプ | コメント |
---|---|---|---|
Transaction type |
(A4) | 入力 | 設定可能値:
会話型の場合は |