IMS BMP および z/OS バッチ環境における制御権移動

IMS™ BMP および z/OS® バッチ環境での移動は、以下の方法で実装されます。

次の表に、移動を実装するさまざまな方法の概要を示します。

EGL ステートメント 元のプログラム 宛先プログラム 実装方法
transfer to program EGL EGL COBOL CALL
非 EGL OS XCTL
非 EGL EGL
transfer to transaction EGL EGL
非 EGL
非 EGL EGL

EGL ビルド・サーバーは、EGL COBOL ランタイム・スタブ・プログラムを生成された各メインプログラムに静的にリンクします。 この EGL COBOL ランタイム・スタブは、EGL ランタイム環境をアクティブにして、実行単位内の最初のプログラムを開始します。 また、スタブは、実行単位内の任意のプログラムによって発行された transfer ステートメントに応答して移動要求を実行します。

transfer to program を使用した EGL プログラムから EGL プログラムへの移動

EGL プログラムが transfer to program ステートメントを使用して別の EGL プログラムに制御権を移動する場合は、移動元の EGL プログラムが終了し、EGL プログラムにリンクされた EGL COBOL ランタイム・スタブに制御権が戻ります。 スタブは、EGL の移動元プログラムに対して、生成時に指定されたリンケージ・オプション・パーツに応じて静的または動的の呼び出しを発行します。 EGL COBOL ランタイム・スタブ・プログラムは制御権を保持し、EGL ランタイム環境はアクティブなままになります。

次に、EGL の移動先プログラムで transfer to program ステートメントが使用されると、制御権は EGL COBOL ランタイム・スタブ・プログラムに再度戻され、要求された移動が処理されます。

それぞれの場合で、EGL の移動先プログラムはその main 関数で開始します。

transfer to transaction を使用した EGL プログラムから EGL プログラムへの移動

EGL プログラムが transfer to transaction ステートメントを使用して別の EGL プログラムに制御権を移動する場合は、移動元の EGL プログラムが終了し、EGL プログラムにリンクされた EGL COBOL ランタイム・スタブ・プログラムに戻ります。 スタブは、ターゲット・プログラムへの移動に OS XCTL マクロを発行します。 COBOL および Rational® COBOL Runtime for zSeries は、いずれも OS XCTL マクロが使用されるごとにランタイム環境をクリーンアップして再確立します。 COBOL および Rational COBOL Runtime for zSeries は、いずれも OS XCTL の終了および初期化のロジックを使用します。 ビルド記述子オプション synchOnTrxTransfer を YES に設定すると、コミット点を制御できます。

transfer to program または transfer to transaction のいずれかを使用した非 EGL プログラムへの移動

EGL プログラムが transfer to program または transfer to transaction ステートメントを使用して非 EGL プログラムに制御権を移動する場合は、移動元の EGL プログラムが終了し、EGL プログラムにリンクされた EGL COBOL ランタイム・スタブ・プログラムに戻ります。 スタブは、非 EGL プログラムへの移動に OS XCTL マクロを発行します。 COBOL および Rational COBOL Runtime for zSeries は、いずれも OS XCTL マクロが使用されるごとにランタイム環境をクリーンアップします。 COBOL および Rational COBOL Runtime for zSeries は、いずれも OS XCTL の終了ロジックを使用します。 非 EGL プログラムは、独自のランタイム環境を確立し、OS XCTL で必要なすべての初期化ロジックを実行します。 ビルド記述子オプション synchOnTrxTransfer を YES に設定すると、コミット点を制御できます。

EGL プログラムが PSB で開始された場合は、移動で指定されたレコードおよび dliLib.psbData 構造体の両方が OS XCTL パラメーターとして渡されます。 それ以外の場合、移動で指定されたレコードのみが渡されます。 パラメーターが渡されない場合、レジスター 1 は 0 になります。 『標準リンケージ規約』を参照してください。

dliLib.psbData を渡す場合は、特別な考慮事項が適用されます。 詳しくは、『dliLib.psbData 構造体のフォーマット』を参照してください。

ターゲット・プログラムは、EGL プログラムから渡されたパラメーターに対して FREEMAIN を発行できます。 FREEMAIN のアドレスは、レジスター 1 にあるアドレスです。 FREEMAIN の長さは、長さフィールドに 100 を加算した値です。

transfer to program または transfer to transaction ステートメントが使用される場合は、非 EGL プログラムに移動することを以下のいずれかの方法で指示する必要があります。

  • transfer ステートメントで isExternal プロパティーを YES に設定します。
  • transferToProgram または transferToTransaction 要素のリンケージ情報で、リンケージ・オプション・パーツに externallyDefined オプションを指定します。

OS XCTL を使用した非 EGL プログラムから EGL プログラムへの移動

IMS BMP および z/OS バッチ環境における非 EGL プログラムから EGL プログラムへの移動は、OS XCTL を使用して EGL プログラムに実装できます。 以下のセクションでは、OS XCTL コマンドでパラメーターを渡すさまざまな方法について説明されています。

標準リンケージ規約

1 つまたは 2 つのパラメーターが OS XCTL の受け取り側プログラムに渡されます。 最初のパラメーターは作業用ストレージ・バッファーであり、バッファー長 (作業用ストレージ・データ長に 10 を加算) が格納された 2 バイトのバイナリー長フィールド、8 バイトの充てん文字フィールド、および作業用ストレージ・データで構成されています。 EGL プログラムが DL/I プログラムである場合にのみ使用される 2 番目のパラメーターは、dliLib.psbData 構造です。 下の図は、移動元プログラムが渡す必要があるパラメーター・リストの形式を示しています。

図 1. OS XCTL でのパラメーターの受け渡し: 例 1
OS XCTL でのパラメーターの受け渡し

dliLib.psbData 構造のフォーマットについては、『dliLib.psbData 構造体のフォーマット』を参照してください。レジスター 1 は、渡すデータがない場合、0 に設定されることがあります。

EGL プログラムで FREEMAIN をサポートする標準リンケージ規約

Rational COBOL Runtime for zSeries で、EGL プログラムに渡される領域用に FREEMAIN を発行する場合は、渡されるすべてのデータを一括して格納する単一の領域を取得します。この領域のサイズは、受け渡す作業用ストレージ・データの長さに 110 バイトを加算した値にしてください (下図を参照)。 その領域の先頭にパラメーター・リスト・ポインターをセットアップし、その領域内の 100 のオフセット位置から開始して長さフィールドおよび充てん文字フィールドを格納し、受け渡す作業用ストレージ・データを領域の 110 のオフセット位置に移動します。 その領域の開始位置を指定するレジスター 1 で OS XCTL マクロを発行します。

図 2. OS XCTL でのパラメーターの受け渡し: 例 2
OS XCTL でのパラメーターの受け渡し
注: 上位ビットは、以下のいずれかのポインターについてオンにする必要があります。
  • dliLib.psbData が渡されない場合は、作業用ストレージへのポインター
  • dliLib.psbData が渡される場合は、dliLib.psbData へのポインター

フィードバック