メインフレーム環境との互換性

Visual COBOL には、次のメインフレーム機能をエミュレートする機能があります。

メインフレームポインタ

Visual COBOL では、COBOL プログラム内のメインフレームスタイルのポインタとの互換性を次のように実現しています。

AMODE コンパイラ指令

次のプログラムモジュールには AMODE 指令が必要です。

Visual COBOL では、DATA コンパイラ指令の使用と設定も行えます。このコンパイラ指令は、AMODE コンパイラ指令を使用してコンパイルしたプログラムのデータ部の配置を制御します。

次の表に、COBOL のいくつかの方言に必要な AMODE 指令と DATA 指令の設定を示します。

COBOL 方言 指令
COBOL 370 AMODE(31) DATA(31)
VS COBOL II (全リリース) AMODE(31) DATA(31)
OS/VS COBOL AMODE(24)

使用している方言に応じてこれらの指令を正しく設定する必要があります。

関連項目

キャンセルされた副プログラム内のデータへのアクセス

メインフレームでは、COBOL プログラムは副プログラムがキャンセルされた場合でも、副プログラム内のデータ部内に定義されたデータを継続して使用することができます。この機能は Server Express でエミュレートされていますが、その使用はお奨めしません。

この機能は、mfpm_access_cancelled_data チューナーを使用すると使用可能にできます。

副プログラムをキャンセルする前に、呼び出し側プログラム内のポインタ変数に、副プログラム内で継続して使用するデータのアドレスを設定します。副プログラムをキャンセルした後、Server Express がキャンセルされた副プログラムの作業場所節を解放するまで、そのデータは継続して使用できます。この作業場所節の解放は、以下の場合に行われます。

解放された作業場所節を指し示しているポインタ変数を使用した場合の結果は予測できません。

関連項目

COBOL プログラム用エントリポイントマッピング

Entry Point Mapping 機能を使用すると、COBOL プログラム内のエントリポイントを指定できます。これにより、アプリケーションは実行時にこのエントリポイントを検索できます。エントリポイントが呼び出される前に、まだロードされていないプログラム内のエントリポイントを指定する必要があります。

Entry Point Mapping の機能を使いこなすには、エントリポイントの呼び出しが通常どのようにランタイムシステムによって解決されるのかを理解する必要があります。

プログラムの静的リンクで解決されていないエントリポイントをプログラムで呼び出すと、ランタイムシステムは、動的に解決するためにそのエントリポイントを検索します。

プログラムがロードされると、プログラムの名前とプログラム内のすべてのエントリポイントがテーブルに記録されます。エントリポイントへの呼び出しが実行されると、ランタイムシステムはテーブルを調べてエントリポイント名を検索します。エントリポイント名が見つからない場合には、同一名の実行可能ファイルをディスク上で検索します。見つからない場合には、エラーが返されます。

結果として、プログラムが実行可能ファイルの名前と異なるエントリポイント、または先にロードされたプログラム内のエントリポイントと異なるエントリポイントを呼び出すと、ランタイムシステムはエントリポイントを見つけることができないため、プログラムが失敗します。このような場合にのみ、Entry Point Mapper を使用する必要があります。

この問題は、開発を進めるためにメインフレームから PC にダウンロードしたプログラムコードを使用する際に頻繁に発生します。メインフレームプログラムでは、しばしば単一プログラム内に複数のエントリポイントがあります。メインフレームの場合、エントリーポイントはリンクによって解決されます。このため、プログラムへの呼び出しを行い、プログラムが呼び出されているかどうかに関係なくエントリポイントを検索することができます。

Server Express を使用すると、エントリポイントを含むプログラムがまだ呼び出されていない場合には、そのエントリポイントへの呼び出しが失敗します。

この問題を回避するには、エントリポイントテーブルを含むエントリ名マップファイルを作成し、そのマップファイルをランタイムシステムで使用できるようにする必要があります。

エントリ名マップファイルの作成

マップファイルはテキストエディタを使用して作成します。各エントリポイントごとに、次の 3 行を入力する必要があります。

[ENTRY-POINT] entry-point-name
[PROGRAM-NAME] main-program-name
[SUBPROGRAM-NAME] subprogram-containing-entry-point

主プログラム A と副プログラム C の実行単位を見てみます。この実行単位では、主プログラム A は副プログラム C 内のエントリポイント B を呼び出します。エントリ名マップファイル内のテーブルエントリは次のとおりです。

[ENTRY-POINT] B
[PROGRAM-NAME] A
[SUBPROGRAM-NAME] C

注:

エントリ名マップファイルをランタイムシステムで使用可能にする

entry_name_mapper チューナーを使用して、エントリ名マッピングを使用することをランタイムシステムに指示します。entry_name_mapper を設定した場合、ランタイムシステムによるエントリ名マップファイルの検索方法は、ENTRYNAMEMAP 環境変数が設定されているかどうかによって異なります。

どちらの場合でも、ランタイムシステムがエントリ名マップファイルを複数見つける場合があります。つまり、同じエントリポイントを異なるファイル内で個別に定義することができます。複数のエントリが見つかった場合、エントリ名マップファイル内で最初に見つかった定義が優先されます。ランタイムシステムがエントリ名マップファイルを検索する順序を変更するには、COBDIR 環境変数または ENTRYNAMEMAP 環境変数のパス内でのファイルの順番を変更する必要があります。

関連項目

別名の作成

別名を作成するには、Entry Point Mapper を使用して IBM メインフレームリンケージエディタの別名機能をエミュレートします。この別名機能では、システムが別名を使用してプログラムを実行するようにします。別名を作成するには、テキストエディタを使用してエントリ名マップファイルを編集します。

実行時、Visual COBOL は最初に元の名前のプログラムを探します。元の名前のプログラムが見つかると、Entry Point Mapper は起動されません。

[ENTRY-POINT] 行に別名を、[SUB-PROGRAM] 行に実際のプログラム名を入力します。

例 1

主プログラム progroot の実行を見てみます。この実行単位では、progroot は名前 pacct001 を使用して呼び出しを行います。必要な副プログラムの実際の名前は tacct001 です。mfentmap.dat ファイル内のテーブルエントリは次のとおりです。

[ENTRY-POINT] pacct001
[PROGRAM-NAME] progroot
[SUBPROGRAM-NAME] tacct001

例 2

原始プログラムに指定された名前とは異なる名前を使用してプログラムをロードする場合を見てみます。たとえば、プログラムの実際の名前が myprog で、JCL に myprogx をロードする命令があるとします。メインフレームの場合、プログラムをリンクして、必要な名前を指定することでプログラムをロードすることができます。ただし、Server Express では COBOL プログラムをリンクできないため、Entry Point Mapper を使用して、プログラムをロードするための名前と実際のプログラム名を関連付けます。

たとえば、プログラム名が myprog で、myprogx という名前でプログラムをロードする場合を見てみます。mfentmap.dat ファイル内には次のテーブルエントリが必要です。

 [ENTRY-POINT] myprogx
 [PROGRAM-NAME] *
 [SUBPROGRAM-NAME] myprog

ここで、 [ENTRY-POINT] は別名を定義し、[SUBPROGRAM-NAME] は実行可能なプログラムの名前です。

SMS データクラスの使用

Storage Management Subsystem (SMS; 記憶域管理サブシステム) データクラスはデータセット属性 (レコード長やレコード形式など) のテンプレートであり、データセットを新規に作成する際に使用されます。Server Express では、エンタープライズサーバで実行するアプリケーションで SMS データクラスを使用させるようにすることができます。

データクラス定義は、Mainframe Express で作成したファイルに格納されます。Mainframe Express でデータクラス定義ファイルを作成した後、SMS サポートを使用可能にして、エンタープライズサーバで使用するデータクラス定義ファイルを指定する必要があります。以下に手順を示します。

  1. MF_SMS 環境変数に ON を設定して SMS サポートを使用可能にします。
  2. 使用するデータクラス定義ファイルを以下の手順で指定します。
    1. Enterprise Server Administration のホームページのサーバの表で、編集したいサーバがある行の左の [編集] をクリックします。
    2. [プロパティ] タブをクリックし、[一般] タブが選択されていない場合には選択します。
    3. 構 情報」フィールドに次の情報を指定します。
      MFUSERCAT_LOC=definition-file

      ここで、definition-file は使用するデータクラス定義ファイルの位置を示す完全修飾名です。

    4. [OK] をクリックします。

データクラスを定義してデータクラス定義ファイルを使用可能にした後は、次のいずれかの方法でデータクラスを参照することができます。

同じ定義ファイルを複数のエンタープライズサーバで使用することができ、データクラス定義の一貫性が保障されます。データクラスの指定がない場合は、デフォルトのデータクラス MFEDFTDC が使用されます (存在する場合)。このデータクラスをエンタープライズサーバで使用するためには、エンタープライズサーバのデータクラス定義ファイルにこのデータクラスが定義されている必要があります。

SMS の詳細は、IBM BookManager Server Library で『DFSMSdfp Storage Administration Reference』を参照してください。