独自のデータ変換モジュールの作成

組み込みモジュールでは提供されない変換が必要なために独自のデータ変換モジュールを作成する場合のモジュールについて、次のとおりです。

  • 名前は 8 文字以下にする必要があります。
  • CHARSET"ASCII" でコンパイルします。
  • 次のインターフェイスを使用して呼び出されます。
    linkage section.                                                  
    01  lk-function          pic x(3). *> PUT or GET         
    01  lk-len               pic 9(5). *> len of lk-data           
    01  lk-data.                       *> data to translate                               
        05  lk-bytes         pic x(1)              
             occurs 32767 times.                
                                                                             
    procedure division using lk-function                              
                             lk-len                                   
                             lk-data.    
    ...

モジュールの目的が ASCII から EBCDIC への変換を実行することである場合、lk-function を「PUT」に設定する必要があります。EBCDIC から ASCII への変換を実行する場合は、lk-function を「GET」に設定する必要があります。

変換モジュールから戻ったら、lk-len は返されたデータの長さを保持する必要があります。シングルバイト文字セットの場合、これらの値は変更されませんが、ダブルバイト文字セットの場合は長さが異なることがあります。MFFTP は戻り値を使用して出力レコードを書き込みます。

Micro Focus 製品はすでに多くの異なるコードセットをサポートしていますが、Micro Focus 開発製品で、追加のコードセットをインストールできます。開発ドキュメントの「コードセットの変換」セクションの「Codecomp ユーティリティ」を参照してください。MFFTP で変換用に作成するモジュールは、提供されているサンプルの CSnnnn.cbl プログラムを使用して説明されているモジュールに似ています (「文字セット変換をカスタマイズするには」を参照)。大きな違いの 1 つは、上記のインターフェイスは MFFTP からのみ呼び出されるため、「NOCANCEL」としてコンパイルしてはいけない、ということです。

専門のコードセット変換モジュールについて、より一般的な必要性があり、CSnnnn プログラムを作成する場合、MFFTP 変換モジュールをコーディングして、そのモジュールを呼び出すことができます。

変換モジュールは、使用されるジョブ ステップごとに MFFTP によって少なくとも 2 回呼び出されます。最初の 2 つの呼び出しで、「ラウンド トリップ」変換が機能することが確認されます。

  • 最初の呼び出しは、256 のデータ長 (lk-len) および x'00‘ から x'FF’ までの 16 進値を含むデータ (lk-data) で、関数 (lk-function) は PUT です。
  • 2 番目の呼び出しには最初の呼び出しからの出力が含まれ、関数は GET です。

次に、GET 呼び出しからの戻り値が PUT 呼び出しへの入力と同じであることを確認するために比較が行われます。モジュールがこのチェックに失敗すると、警告メッセージが発行され、MFFTP_TRANSLATE_SAFETY = OFF の設定が設定されていない限り、モジュールは使用されません。

モジュールへの 3 回目以降の呼び出しは、レコードごとのデータ セットの変換です。