目次 前 次 PDF


COBOLコンバータ

COBOLコンバータ
この章には次のトピックが含まれます:
COBOLコンバータの概要
このツールの役割は、ソース・プラットフォーム(z/OS、IBM COBOLダイアレクト)で実行しているCOBOLプログラムを、アプリケーションの動作を維持したままでターゲット・プラットフォーム(UNIXまたはLinux、Micro Focus COBOLダイアレクトまたはCOBOL-IT)で実行するCOBOLプログラムに変換することです。変換の実行は、他のOracle Tuxedo Application Rehosting Workbench (Tuxedo ART Workbench)ツールによって変換または生成される他のコンポーネントと関連しています。
この項の目的は、次のようなCOBOLコンバータのすべての機能を正確に説明することです。
スコープ
Refine COBOLコンバータにより、次のトランスフォーメーションが1回の実行で処理されます。
結果として生成されるプログラムをコンパイルすると、「スコープ」で詳述する一部のケースを除き、ソース・プラットフォームと同じ動作のままターゲット・プラットフォームで実行できます。
入力
COBOLコンバータで入力として扱われるものを次に示します。
Tuxedo ART Workbenchカタロガにより生成されたPOBファイルに格納されている、変換対象のCOBOLプログラムの抽象構文ツリー(1つ以上)。
出力
次の出力が生成されます。
変換フェーズ
COBOL変換プロセスは論理的に次の2つのフェーズに分かれます。
個別変換フェーズは、いくつかのプログラムに対して同時に実行できますが、コピー調整フェーズはグローバルなコピー・ファイル・ベースを更新するため、1つのプロセスとして、可能であれば増分的に実行する必要があります。こうすることで、COBOLコンバータの可能な実行モードを指示できます。詳細は、「コマンド行構文」を参照してください。
制限
定義では、Tuxedo ART Workbench COBOLコンバータは、Tuxedo ART Workbench COBOLカタロガで受け入れられたプログラムのみを受け入れますが、エントリにはそれ以外の制約はありません。
結果として生成されるプログラムは、ターゲット・プラットフォームでコンパイルして実行すると、次に示す潜在的な問題を除いてソース・プラットフォームの場合と同じように動作します。これらの問題はオラクル社が責任を負うものではありません。
この項では、次の節について説明します。
LinuxプラットフォームでのCOMP-5タイプの使用
Tuxedo ART Workbench COBOLコンバータは、移植可能なバイナリ整数型(BINARY、COMP、COMP-4)をネイティブ・バイナリ型COMP-5に変換します。この目的は、トランザクション処理フレームワークのサブプログラムなど、C言語で記述されたサブプログラムとの互換性を保証し(『Tuxedo ART Workbenchリファレンス・ガイド』の「CICS」の項を参照)、実行パフォーマンスを向上させることです。これが原因で、ターゲット・プラットフォームとソース・プラットフォームとでエンディアンが異なっている場合、特にLinuxとIntelのプラットフォームで問題が発生する可能性があります(Intelプロセッサ・ラインはリトルエンディアンですが、zSeriesプロセッサはビッグエンディアンです。IBM pSeriesやHP-RISCなど、他のほとんどのプロセッサもビッグエンディアンです)。実際、このケースでは、バイナリ変数のバイト・オーダーがソース・プラットフォームに対して逆になります。このようなバイナリ変数が文字(PIC X)変数で再定義され、この再定義を使用してバイナリ変数の個々のバイトにアクセスする場合には、動作が異なる可能性があります。次に例を示します。
リスト10-1 バイナリ・フィールドの処理の例
WORKING-STORAGE SECTION.
01 FILLER.
02 BINVAR PIC S9(9) COMP.
02 CHARVAR REDEFINES BINVAR PIC X(4).
PROCEDURE DIVISION.
...
MOVE ... TO BINVAR
IF CHARVAR(1:1) = ... THEN ...
 
z/OSハードウェアなどのビッグエンディアン・マシンでは、CHARVAR(1:1)にはBINVARの最も重要な(上位オーダー)バイトが含まれます。ただし、リトルエンディアン・マシンでは、同じコードCHARVAR(1:1)にはBINVARの最も重要でない(下位オーダー)バイトが含まれます。これにより確実に動作は変化し、目にする結果もおそらく異なります。ただし、Tuxedo ART Workbench COBOLコンバータでは、このような状況の箇所をすべて検出して修正することはできません(たとえば、上の例は明らかなものですが、多くの複雑なケースが存在します)。これらは手動で処理する必要があります。
COMP-5型およびTRUNCコンパイラ・オプションの使用
前の段落で説明したように、Tuxedo ART Workbench COBOLコンバータは移植可能なバイナリ整数型(BINARY、COMP、COMP-4)をネイティブ・バイナリ型COMP-5に変換します。エンディアンの問題に加え、これが原因で、ソース・プラットフォームで(デフォルトの) TRUNC(STD)オプションを指定してコンパイルされたアプリケーションについて別の種類の動作の違いが発生することがあります。このオプションは、Micro Focus COBOLのTRUNCオプションまたはCOBOL-ITのBINARY-TRUNCATEオプションに相当します。実際、ソース・プラットフォームとターゲット・プラットフォームの両方で移植可能なバイナリ型はこのオプションの対象となりますが、ネイティブ型は対象となりません。通常、バイナリ整数型の変数は、実用的な値ではなく制御値(ループ・カウンタ、配列索引など)を保持するために使用されるため、実際に動作の変化が見られる確率は非常に低いと考えられます。いずれにしても、動作の変化が見られた場合には、Tuxedo ART Workbenchユーザーが変化を受け入れるか、手動で修正する(たとえば、少数の変数を選択して元のバイナリ型に戻す)かの対応を取ることになります。
EBCDICからASCIIへの変換の問題
ターゲット・プラットフォームでのネイティブ・ユーティリティ・プログラム(たとえば端末でのデータ・ファイルのブラウズ)の効率性と互換性の理由から、Tuxedo ART Workbenchで実行される移行の基本的な設計選択肢の1つは、ソース・プラットフォームのネイティブ文字セット(EBCDICまたはその派生形)から、ターゲット・プラットフォームのネイティブ文字セット(ASCIIまたはその派生形)へのテキスト(アルファベット)データの変換です。ただし、この常識的な決定により、移行プロセスに重大な影響が生じます。
ほとんどの場合、これらの指示に正しく従うと、結果として生成されるアプリケーションは円滑に実行されます。ただし、有効な解決策が見つからない問題が1つあります。EBCDICとASCIIの文字セットではコレーティング・シーケンスがまったく同じではないため、これが原因でソートや文字列の比較での動作が異なる可能性があります。ほとんどの場合、ソートまたは比較するデータは名前(アルファベット)や日付(数値)など同種のものであるため問題はありません。アクセント記号付き文字のような特殊な文字の場合のみソートが若干異なることがありますが、これも大きな問題ではありません。ただし、文字と数字が混在するデータをソートまたは比較する場合には、EBCDICでは文字が数字より前にソートされ、ASCIIでは数字の後にソートされることから、動作の違いに気付くことがあります。典型的な例の1つは、アカウント番号など、数字と文字の両方を使用するデータのキーを計算する場合です。COBOLコンバータではこうした問題を処理できません。これは、COBOL変数の宣言に関連する静的な問題ではなく、COBOL変数の内容に関連する動的な問題であるためです。
リテラル定数: 文字または数値
前述のように、COBOLプログラムの文字列や文字リテラル(16進文字リテラルを含む)はEBCDIC-to-ASCII変換の対象になります。これは、これらのリテラルがテキストまたはテキストの一部を示す場合には適切です。ただし、場合によっては、このような定数値が、ファイル・ステータス・コード、条件コード、CICS関連値などの(数値)コードを示すことがあります。この場合は一般に、EBCDIC-to-ASCII変換をこれらの値に適用することは適切ではありません。しかしながら、COBOLコンバータは、他の自動処理ツールと同様、COBOL変数やリテラルのセマンティックな性質を確実に推測できないため、自身でこれらの例外を処理できません。これは、ポストトランスレーションを使用して手動で行う必要があります(「post-translation-file句」を参照)。
注意:
浮動小数点変数の使用
ソースの浮動小数点変数型(COMP-1およびCOMP-2)は、ターゲット・プラットフォームの同じ型に変換されます。このため、Micro Focus COBOLコンパイラおよびランタイム・システムでは、浮動小数点データ(COMP-1およびCOMP-2変数)をIBM16進形式またはネイティブ(IEEE 754)形式のどちらでも使用できます。NONATIVEFLOATINGPOINTオプションがコンパイル時に設定されると(デフォルトはtrue)、浮動小数点形式が実行時に選択されます。これは、次のようにMAINFRAME_FLOATING_POINT環境変数またはmainframe_floating_pointチューニング変数(あるいは両方)によって変わります。
MAINFRAME_FLOATING_POINT環境変数が設定されるか、mainframe_floating_pointチューニング変数がtrueに設定されると、IBM形式が使用されます。
MAINFRAME_FLOATING_POINT環境変数が設定解除されるか、mainframe_floating_pointチューニング変数が設定解除またはfalseに設定されると、ネイティブ形式が使用されます。
最初のケースでは、動作の違いがわからないようにMicro Focus COBOLランタイム・システムによって処理されます。ただし、この形式の処理はすべてソフトウェア内で行われる一方、ネイティブ形式はプロセッサで直接サポートされることから、ランタイムの効率が低下します。さらに、この形式はOracle浮動小数点データ型(BINARY_FLOATおよびBINARY_DOUBLE)と直接の互換性がなく、Oracleエンジンによって他の数値型に変換できません。実際、opaque列(それぞれRAW(4)およびRAW(8))に格納する以外に方法はありませんが、このような値をSQLコードで使用することはできません。
結果として、移行時またはその後で、ネイティブIEEE754浮動小数点の使用を検討することをお薦めします。これは、少なくともOracleに対しては、高い効率性、移植性(国際標準で定義)および互換性を備えています。次に理由を示します。
1.
2.
3.
元のアプリケーションと移行したアプリケーションの動作の違いがわかる可能性もあります。動作の違いの大部分は受け入れられるものです。浮動小数点の計算は数学的な正確さからいえば概算であることに留意してください。ターゲット・マシンで得られる概算値はソース・マシンでの概算値と異なるということです。
注意:
ソース・プラットフォームでは、COMP-1型とCOMP-2型の表現範囲は同じで、約10-79から1076までですが、ターゲット・プラットフォーム(ネイティブでIEEE 754形式をサポート)では、COMP-1の範囲は約10-45から1038、COMP-2の範囲は約10-323から10308です。したがって、範囲と制度のトレードオフは両方のプラットフォームで異なります。
ソース・プラットフォームとターゲット・プラットフォームの両方に含まれる範囲に対して同じ計算を行うと、表示される結果(DISPLAYによる出力)の相対的な誤差は常に、COMP-1変数の使用時には10-6未満、COMP-2変数の使用時には10-14未満となりました。これは、すべてが問題なく機能するという決定的な証明にはなりませんが、少なくとも有望な目安といえます。
このような結果から、COMP-1変数をCOMP-2変数で置き換えることで、ごくわずかな誤差を除きソースと同じ動作をターゲットで常に再現できると考えられます。
注意:
ネイティブIEEE 754形式の使用を決定する場合は、NATIVEFLOATINGPOINTコンパイラ・オプションの設定をお薦めします。これにより、実行時のオプションやチューニング変数にかかわらず、コンパイル時にこの形式の使用が強制されます。したがって、実行時の形式テストが不要になります。
LINE SEQUENTIALファイルでのREWRITE操作
デフォルトでは、ソース・プラットフォームでSEQUENTIALであるデータ・ファイルは、ターゲット・プラットフォームでは使用しやすいLINE SEQUENTIALファイルに変換されます。一般的にこれは適切な選択であり、このようなファイルはターゲットCOBOLシステムで十分にサポートされます。ただし、難点があります。こうしたファイルは本質的に可変レコード・サイズであるため、REWRITE操作によって予測できない結果が生じて動作が変わる可能性があります(Micro Focus COBOLおよびCOBOL-ITのドキュメントを参照)。特定のSEQUENTIALファイルをLINE SEQUENTIALに変換したとき、そのファイルに対するREWRITE操作が必ず成功するかどうか不確かな場合は、SEQUENTIALのまま変更しないことをお薦めします。このためには、後で示すpure-seq-map-file句で参照される構成サブファイルに記述を挿入します。
この問題の処理を簡易にするため、将来のバージョンでは、REWRITE操作が生じるSEQUENTIAL論理ファイルのリストがTuxedo ART Workbenchカタロガによって生成されるようになります。
ポインタ操作
ポインタ・サイズの変更: 再定義の認識
ソース・プラットフォームでは、型がPOINTERの変数は、メモリー内の4バイト(32ビット)を占めます。64ビットのオペレーティング・システムに基づくすべてのサポート対象ターゲット・プラットフォームでは、このような変数は8バイトを占めます。これにより、次のように様々な動作の違いが発生することがありますが、オラクル社が責任を負うものではありません。
テクニカル再定義: POINTER変数をPIC X(4)またはPIC S9(9) COMP変数によって直接再定義して、ポインタ値の表現を操作するために使用する場合は、再定義する変数とそのためのコードを手動で再作成する必要があります。ただし、このようなマシン依存の方法はお薦めしません。
構造のアライメント: POINTER変数がバリアント(再定義)を含む構造の一部であり、1つのバリアントの特定の1フィールドが他のバリアントの他のフィールドと同様のアライメントになるように(同じ位置になるように)様々なバリアント(サブ構造)が設計されている場合、POINTER変数のサイズが変わった後でも、埋め合せるためのフィラーを挿入するなどしてこのプロパティを維持する必要があります。これも手動で処理する必要があります。このように意図されたアライメントは再定義全体で維持する必要があり、他の構造に移動するときにも維持する必要があります。
構造のサイズ: POINTER変数が含まれる構造が、POINTER変数のサイズが変わる前に、その構造を十分に保持できる大きさの構造化されていないPIC X(…)変数に移される場合、サイズが変わった後もそのままかどうかを確認する必要があります。
NULLアドレスのLinkage-Section引数
ソース・プラットフォームとターゲット・プラットフォームの両方で、かわりに明示的なOMITTED項目が渡されたため、あるいは呼出し元が呼出し先の想定よりも少ない引数を渡したために、実際には呼出し元によって渡されないプログラム・パラメータ(Linkage Sectionに定義され、Procedure DivisionのUSING句に指定される)は、呼出し先ではNULLアドレスを持つようになります。したがって、パラメータの値にアクセスする前にパラメータのADDRESSNULLかどうかをチェックすることは非常に有効であり、お薦めする方法です。
ただし、呼出し先がパラメータ・アドレスのチェックに失敗して、実際のアドレスがNULLであったときに、ソース・プラットフォームとターゲット・プラットフォームの動作が異なる場合があります。次に例を示します。
z/OSおよびAIXでは、NULLはアドレス0であり、有効なアドレスとみなされます。したがって、そのパラメータにアクセスすると、そのアドレスに格納されているものが取得されます(予測できない結果が生じる可能性があります)。
ただし、LinuxではNULLはやはりアドレス0ですが、これは有効なアドレスとはみなされません。したがって、そのパラメータにアクセスするとプログラムが異常終了します。
コンバータがアドレス・チェックを挿入できても、テストに失敗したときに何もできないため、この状況およびこれに伴う動作の違いを自動的に処理することは不可能です。さらに、この問題によって実際に影響を受けるサブプログラムとパラメータのセットは、すべてのサブプログラムとパラメータのごく一部であり、それらすべてについてそのようなアドレス・チェックを挿入するには手間がかかります。これは、可能であればポストトランスレーションを使用して、手動で処理する必要があります。
後出のSTICKY-LINKAGEコンパイラ・オプションの説明も参照してください。
NULLポインタ値の表現
NULLポインタ値の表現は、プラットフォームごとに異なる可能性があります。特にソース・プラットフォームとターゲット・プラットフォームの間では、他のすべてのポインタ値のようにサイズが同じにならないというだけでも異なります。この結果、この値の特定の表現を想定しているすべてのプログラムは(たとえば、バイナリ整数値との間でのキャストなど)は、プラットフォームごとに動作が異なる可能性があります。COBOLコンバータが自動的にこの問題を処理することはできません。手動で問題を処理する必要があります。いずれにしても、マシン依存の処理はお薦めしません。
SQL文のQUERYNO
QUERYNO句はDB2のみでサポートされており、Oracle DBではサポートされていません。ターゲットDBがOracle RDBMSの場合、SQL文からQUERYNOが自動的に削除されます。
STOP RUNとCALL ARTSTOPRUNの置換
COBOLプログラムのSTOP RUN文は自動的にCALL ARTSTOPRUNに置き換えられます。"ARTSTOPRUN"は、ランタイム環境で提供されるユーティリティです。
入力コンポーネントの記述, 前提条件
入力コンポーネントは、カタロガによる解析が終了したアセット内のすべてのCOBOLプログラムです。実際、COBOLコンバータはプログラムのソース・ファイルではなくPOBファイルをロードします。カタロガによって課された制約(ネスト・プログラムなしなど。「カタロガ」を参照)に加え、COBOL変換を試行する前には次のルールに従う必要があります。
構成ファイルの説明
システム記述ファイル
システム記述ファイルには、処理するアセットの全ソース・ファイルの場所、タイプ、可能性のある依存関係が記述されます。このように、これは、カタロガのみでなく、COBOLコンバータも含めたすべてのTuxedo ART Workbenchツールがこれらのソース・ファイルや対応するコンポーネントにアクセスするために不可欠です。
注意:
COBOLソース・ファイルの番号領域とコメント領域Cを除去する必要があるため、オプションCobol-left-marginを1に設定し、オプションCobol-right-marginを66に設定する必要があります。これらはデフォルト値です。
メイン変換構成ファイル
このファイルは、必須のコマンド行オプション-cまたは-configを使用してCOBOLコンバータに渡されます。変換に影響する様々なスカラー・パラメータが定義され、大規模な構成データ(ファイル名変更など)を含む下位ファイルが指定されます。
注意:
ヒント:
一般的な構文
メイン変換構成ファイルの内容は、それぞれキーワードで始まりピリオドで終了する句を任意の順序で指定できる自由形式のリストです。1つ以上の引数をとる句もあれば、引数がないブール句もあります。キーワードは、大文字小文字が区別されない記号です。引数は、整数、シンボルまたは(大文字小文字が区別される)文字列です。空白や改行などはコメントです。コメントは、次の2つの方法で構成ファイルに記述できます。
target-dir句
構文
Target-dir : dir-path .
この句は、ターゲット・ファイル(プログラムとコピー・ファイルの両方)の完全な階層を含むディレクトリの場所を指定します。(システム記述ファイルで指定された)アセットのルート・ディレクトリにソース・プログラムA/B/name.extがある場合、対応するターゲット・プログラムがこのターゲット・ディレクトリにA/B/name.extとして配置されます(ファイル拡張子は異なる可能性があります。後述の説明を参照してください)。コピー・ファイルにも同じ仕組みが適用されますが、ターゲット・パスはMaster-copy/A/B/name.extとなります(拡張子は変わる可能性があります)。Master-copyディレクトリはコピー調整プロセスに関連します。「コマンド行構文」を参照してください。
Sql-rules句
構文
Sql-rules : target-sql-syntax.
この句は、ターゲットSQL構文を指定します。値は、Oracle、db2luwまたはnoneです。db2luwのサポートはきわめて限定的です。
値がnoneの場合、ソース・ファイル内のsqlコードは変換されません。ターゲット・コンポーネントにそのまま転送されます。この句のデフォルト値はoracleです。後者の場合は、構成ファイルでsql-rulesoracleに設定する必要はありません。
keep-same-file-names、target-program-extensionおよびtarget-copy-extension句
構文
keep-same-file-names.
target-program-extension : extension . (or) tpe : extension .
target-copy-extension : extension .( or) tce : extension .
これらの句は、変換されるファイル(メイン・ソース・ファイル)とコピー・ファイルのファイル拡張子の決定方法を次のように指示します。
keep-same-file-names句を指定すると、変換されるプログラムとコピー・ファイルのファイル拡張子は、(カタログ化された)ソース・アセットの元のファイルと同じになります。その他の句は指定しても無視されます。
target-program-extension句を指定すると、変換されるプログラムには指定のファイル拡張子が付きます。
target-copy-extension句を指定すると、変換されるコピー・ファイルには指定のファイル拡張子が付きます。
デフォルトでは、変換されるプログラムにはファイル拡張子cblが付き、変換されるコピー・ファイルにはファイル拡張子cpyが付きます。
Verbosity-Level句
構文
verbosity-level : level .
この句は、COBOLコンバータが実行ログに書き込む詳細のレベルを指定します。デフォルト値の2は詳細、これよりも大きい値はさらに詳細で、値1では重要な(エラー)メッセージのみが表示されます。
deferred-copy-reconcil句
構文
deferred-copy-reconcil.
または
deferred-crp.
または
dcrp.
この句は、変換が完了するまでコピー調整プロセスcrpを延期するように指定します。これにより、COBOL変換を複数の同時プロセスで実行できます。デフォルトでは、この句を指定しないと、コピー調整プロセスは、各プログラムの変換が終了するたびすぐに増分的に実行され、単一プロセス実行になります。詳細は、次のコピー調整プロセスを参照してください。
force-translation句
構文
force-translation.
この句は、致命的なエラーを含む場合でもプログラムの変換(の試行)をするようにCOBOLコンバータに指示しますが、保証はありません。正しくない結果が生成されたり、さらにはコンバータが異常終了する可能性があります。デフォルトでは、この場合、コンバータはそのプログラムの処理を拒否し、スキップして次の処理に進みます。
rename-copy-map-file句
構文
rename-copy-map-file : file-path .
この句は、コピー・ファイルの名前を変更するための情報を含む下位構成ファイルの場所を指定します。後述の「copy-renaming構成ファイル」を参照してください。ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
rename-call-map-file句
構文
rename-call-map-file : file-path .
この句は、サブプログラムとその呼出しの名前を変更するための情報を含む下位構成ファイルの場所を指定します。「Call-Renaming構成ファイル」を参照してください。ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
post-translation-file句
構文
post-translation-file : file-path .
この句は、Tuxedo ART Workbenchコンバータの後で適用する手動変換の説明を含む下位構成ファイルの場所を指定します。「Post-Translation構成ファイル」を参照してください。ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
on-size-error-call句
構文
on-size-error-call: proc-name .
この句は、プログラムを確実に終了させるために呼び出すプロシージャの名前を記号として指定します。この名前は、算術文でのサイズ・エラーなど、IBMコンパイラであれば終了を強制するが、ターゲット・コンパイラはそうしない状況で、終了を強制するために使用されます。デフォルトの名前は.ABORTです。
hexa-map-file句
構文
hexa-map-file : file-path .
この句は、16進形式の文字に適用するEBCDIC-to-ASCII変換を含む下位構成ファイルの場所を指定します。「16進変換構成ファイル」を参照してください。ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
注意:
hexa-map-fileはオプションの項目で、指定しない場合、警告がロギングされます。
conv-ctrl-file句およびalt-key-file句
これら2つの句は一緒に指定します。
構文
conv-ctrl-file : file-path or conv-ctrl-list-file : file-path .
alt-key-file : file-path
これらの句は、file-to-Oracle変換に関する情報を含む2つの下位構成ファイルの場所を指定します。これらのファイルは、Tuxedo ART Workbench File-to-Oracle変換ツールによって、それぞれConv-ctrl-fileまたはConv-ctrl-list-fileおよびAlt-keyファイルとして生成されます。「File-to-RDBMS構成ファイル」を参照してください。
最初の2つの句のうち1つのみを指定する必要があります。conv-ctrl-file句またはconv-ctrl-list-file句のいずれかを指定し、両方を指定しないでください。
ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
RDBMS-conversion-file句
構文
RDBMS-conversion-file : file-path .
この句は、リレーショナルDBMS変換(DB2からOracle)に関する情報を含む最上位の下位構成ファイルの場所を指定します。詳細は、「RDBMS変換構成ファイル」を参照してください。ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
keywords-file句
構文
keywords-file : file-path .
この句は、ターゲットのCOBOLダイアレクトでキーワードまたは予約語に相当するCOBOL識別子の名前を変更するための情報を含む下位構成ファイルの場所を指定します。詳細は、「キーワード・ファイル」を参照してください。ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
accept-dateおよびaccept-day句
構文
accept-date: date-entry-name .
accept-day: day-entry-name .
これらの句は、ACCEPT … FROM DATE文およびACCEPT … FROM DAY文を置換するサブプログラム名を指定します。次に文の例を示します。
ACCEPT MY-DATE FROM DATE
これは次の文で置換されます。
CALL "DATE-ENTRY-NAME" USING MY-DATE BY VALUE LENGTH OF MY-DATE
これにより、プログラムが現在の日付を取得する方法を管理しやすくなり柔軟性も高まります。たとえば、リグレッション・テストの際に、移行されたプログラムをソース・プログラムが実行されたときと同じ現在日付で実行する必要があります。これらのサブプログラム(Tuxedo ART Workbenchユーザーによって要件に基づいて提供される)によってこの処理が可能になります。
これらのいずれかの句を指定しないと、対応する文は変換されません。ターゲットCOBOLパラメータ(Micro Focus COBOLランタイム・システムのcurrent_day、current_month、current_yearパラメータなど)を使用して、ACCEPT文によって返される日付を制御できます。Micro Focus COBOL/COBOL-ITのドキュメントを参照してください。
sql-stored-procedures-file句
構文
sql-stored-procedures-file: file-path .
この句は、COBOLから直接呼び出されるDB2ストアド・プロシージャのリストを含む下位構成ファイルの場所を指定します。詳細は、「ストアド・プロシージャ・ファイル」を参照してください。ファイル・パスは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
remove-sql-qualifier句
構文
remove-sql-qualifier.
この句は、スキーマ修飾子を持つすべてのSQL識別子からそれを除去する変換ルールを有効にします。これにより、結果として生成されるプログラムは暗黙のスキーマ修飾に依存します。
ヒント:
activate-cics-rules句
構文
activate-cics-rules.
この句は、現在の実行で処理されるすべてのプログラムにEXEC CICS文を標準化するルールを適用し、CICSプリプロセッサなど、Oracle Tuxedo Application Runtime for CICS環境でプログラムを使用する準備を行うようCOBOLコンバータに強制します。
注意:
この句と同じ効果があり、より柔軟に使用できる、同じ名前のコマンド行オプションがあります(「cobol-convertコマンド」を参照)。このため、アセット内でTP部分とバッチ部分が明確に識別され、移行プロジェクトで厳密に分けられているプロジェクトを除き、configuration-file句はほとんど使用されないと考えられます。
この句を指定するかどうかにかかわらず、1つ以上のEXEC CICS文を含むすべてのプログラムに前述のルールが適用されます。したがって、この句(または同等のコマンド行引数)はCICS環境で使用されるサブプログラム(暗黙のCOMMAREAなど)のみで有効ですが、それ自体がCICS操作を実行することはありません。
pure-seq-map-file句
構文
pure-seq-map-file: file-path .
または
purely-sequential-map-file: file-path .
この句は、LINE SEQUENTIALに変換せずに(レコード) SEQUENTIALのままにするSEQUENTIAL論理ファイルのリストを含む下位構成ファイルの場所を指定します。詳細は、「purely-sequential構成ファイル」を参照してください。file-pathは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
dont-print-what-string句
構文
dont-print-what-string .
この句を指定すると、変換のタイムスタンプとコンバータのバージョン情報を含むwhat-stringがこの実行で出力されなくなります(通常はコンバータによってすべての変換済ファイルの先頭に挿入されます)。Tuxedo ART Workbenchを使用してアプリケーションが移行されたという事実を隠す必要がないかぎり、これはほとんど使用されません。
remove-empty-copies句
構文
remove-empty-copies .or rec.
この句を指定すると、変換後に役立つCOBOLコードを含まなくなったコピー・ファイルを参照するCOPYディレクティブがコメント・アウトされます。デフォルトでは、これらのディレクティブはアクティブなままです。これは、データベース表に移行されるファイルのFDパラグラフ全体を定義するコピー・ファイルなどに適用されます。
sql-return-codes-file句
構文
sql-return-codes-file: file-path .
この句は、DB2とOracleの対応するSQLCODE値の追加の組合せを含む下位構成ファイルの場所を指定します。詳細は、「sql-return-codes構成ファイル」を参照してください。file-pathは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
list-of-cics-file句
構文
list-of-cics-file: file-path.
この句は、ユーザー定義CICSファイルのリストを含む下位構成ファイルの場所を指定します。詳細は、「list-of-cics構成ファイル」を参照してください。file-pathは文字列として指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
force-add-cics-stub-for-dynamic-calls句
構文
force-add-cics-stub-for-dynamic-calls.
存在する場合、その呼出し先をワークベンチで解決できないときにCICSスタブ(DFHEIBLKおよびDFHCOMMAREA)が動的呼出しの引数に追加されます。
repair-sql-pair-declare-section-stmt句
構文
repair-sql-pair-declare-section-stmt.
COBOLプログラムでは、埋込みSQL文DECLAREEND DECLAREをペアにする必要がありますが、メインフレームではEND DECLAREを使用しなくても機能する場合があります。オープン・プラットフォーム上では、2つの文をペアにする必要があります。
この句は、前のDECLARE文に対してEND DECLARE文が存在しない場合にそれを追加するようCOBOLコンバータに強制します。
注意:
この構成は、ネストされたDECLAREおよびEND DECLARE文では機能しません。
copy-renaming構成ファイル
このファイルは、rename-copy-map-file句に関連します。内容はCSV形式で、セミコロンが区切り文字として使用されています。各行の形式を次に示します。
original-copy-name;original-library-name;new-copy-name.
名前はすべて、COBOLと同様の大文字小文字が区別されない記号です。このような行の意味は次のとおりです。次のようなディレクティブがあるとします。
COPY ORIGINAL-COPY-NAME OF ORIGINAL-LIBRARY-NAME { REPLACING … }
プログラムで検出されると、次のように置き換えられます。
COPY NEW-COPY-NAME { REPLACING … }
ライブラリ名は不便なため、ターゲット・プラットフォームでは使用されません。検索パスを使用する方がはるかに便利です。COBCPY環境変数を参照してください。original-library-nameフィールドが空の場合、このルールでは、次の形式の修飾されていないディレクティブを置換します。
COPY ORIGINAL-COPY-NAME { REPLACING … }
同じ名前変更がコピー・ファイルそのものにも適用されます。コンバータが、このディレクティブで参照されるコピー・ファイルをターゲットのプライベート・コピー・ディレクトリに出力するとき、新しい名前で出力します(コピーの調整の詳細は下記を参照してください)。
rename-copy-map-file句がない場合、またはこのファイルが空の場合、コピーの名前変更は行われません。エラーとなるのは、ファイルが見つからないか読み取れない場合、または同一のoriginal-copy-name;original-library-nameの組合せがファイルの別の行で別のnew-copy-namesに関連付けられている場合です。このケースでは、コンバータはエラー・メッセージで停止し、プログラムの変換は行われません。ただし、同じディレクトリにある異なる2つのコピー・ファイルの名前が同じターゲット・ファイル名に変更されるかどうかはチェックされないことに注意してください。原則としては、これはコピー調整プロセスで適切に処理されるはずですが、保証のかぎりではありません。
Call-Renaming構成ファイル
このファイルは、前述のrename-call-map-file句に関連します。内容はCSV形式で、セミコロンが区切り文字です。各行の形式を次に示します。
original-call-name.new-call-name.
名前はすべて、COBOLと同様の大文字小文字が区別されない記号です。このような行の意味は次のとおりです。次のような文があるとします。
CALL "ORIGINAL-CALL-NAME" { USING … }
プログラムで検出されると、次のように置き換えられます。
CALL "NEW-CALL-NAME" { USING … }
コンバータは、直接構造体(VALUE、MOVEなど)を使用する動的呼出しで使用される変数に関連するリテラル文字列の名前変更も試行します。理由は明白ですが、呼出し先名が、複雑な操作(STRINGなど)を使用して計算されるか、opaqueコンテナを介して転送されるか、または呼出し元プログラムの外部から取得される(たとえば、ファイルから読み取られたり、パラメータとして渡される)ような真に動的な呼出しを処理することはできません。このような状況は手動で処理する必要があります。
同じ名前変更が、呼び出されたサブプログラムとそのエントリ・ポイントにも適用されます。名前変更ファイルにリストされた元の名前のいずれかとベース名が一致するプログラムをコンバータがターゲット・ディレクトリに出力するとき、それは対応する新しい名前で出力されます。同様に、元の名前のいずれかと文字列が一致する引数を含むENTRY文では、その文字列が新しい名前に変換されます。
rename-call-map-file句がない場合、またはこのファイルが空の場合、呼出しの名前変更は行われません。エラーとなるのは、ファイルが見つからないか読み取れない場合、または同一のoriginal-call-nameがファイルの別の行で別のnew-call-namesに関連付けられている場合です。このケースでは、コンバータはエラー・メッセージで停止し、プログラムの変換は行われません。ただし、同じディレクトリにある異なる2つのサブプログラムの名前が同じターゲット・ファイル名に変更されるかどうかはチェックされないことに注意してください。
Post-Translation構成ファイル
このファイルは、post-translation-file句に関連します。その内容は、リスト10-2に示す一連のルールです。
リスト10-2 ポストトランスレーション構成ファイル
rule rule_name
filter [
(+|-)program_name_regexp
]
transform [
source_lines_block
]
into [
target_lines_block
]
 
このようなルールのセマンティクスは単純です。プログラムの(ベース)名がプラス記号のprogram_name_regexpのいずれかと一致し、マイナス記号のものとはいずれも一致しない場合、source_lines_block一致する行ブロックが検出されると、target_lines_blockで置換されます。rule_nameは、変換の適用に関連付けられるコメントで使用されます。詳細は、ポストトランスレータの説明を参照してください。
注意:
ここでの一致は単に、2つの行ブロックの一連のスペースを減らして1つのスペースにするときに、両方のブロックが同一である必要があることを意味します。基本的に同一であれば柔軟に解釈されます。
post-translationファイルには必要なだけのルールを任意の順序で含めることができます(ただし、2つのsource_lines_blocksが重なるとき、またはsource_lines_blockとtarget_lines_blockが重なるときは、ポストトランスレータの動作は定義されません)。
ヒント:
コメントはシャープ記号(#)から行の最後までです。ルールの間、4つの句の間、ルール名の後であれば、どこにでも挿入できます。コメントを角カッコで囲んだフィルタの内側またはtransformブロックやintoブロックに挿入すると、コメントではなくブロックの内容として認識されます。
program_name_regexpは、リスト10-3に示す*.cblBATCH/[A-F][D-Z]*などの正規表現です。
リスト10-3 正規表現
regle add-wait
filtre [
+*.cbl
]
transform [
DISPLAY "Welcome..."
DISPLAY "Begin..."
]
into [
DISPLAY "Welcome..."
DISPLAY "Wait..."
DISPLAY "Begin..."
DISPLAY "Wait..."
]
 
前述の例では、リスト10-4に示すように、変換された*.cblファイルに2つの"Wait..."文字列が追加されます。
リスト10-4 変換された.cblファイル
*{ Post-Translation add-wait
* DISPLAY "Welcome..."
* DISPLAY "Begin..."
DISPLAY "Welcome..."
DISPLAY "Wait..."
DISPLAY "Begin..."
DISPLAY "Wait..."
*} Post-Translation
 
16進変換構成ファイル
このファイルは、前述のhexa-map-file句に関連します。内容は、16進形式の文字に適用するEBCDIC-to-ASCII変換表です(テキスト形式の文字は、ソース・ファイルそのものと同時に変換されます)。構文は、セミコロンが区切り文字の単純なCSVファイルです。各行の形式を次に示します。
source-hexa-code;target-hexa-code,
各16進コードは、通常どおり2つの16進文字(0-9、A-F)で記述されます。この変換表のセマンティクスでは、ソース・ファイルの16進リテラルがこの表のソース・コードと一致しない場合、そのまま変換されずに残されます。このような変換は埋込みSQLコードに対しても機能します。コンバータでは、変換表そのものの一貫性(source-hexa-codeまたはtarget-hexa-codeが重複していないことなど)も、それが実際にEBCDIC-to-ASCII変換を記述していることもチェックされないことに注意してください。
ヒント:
hexa-mapファイルの生成方法
Oracle Tuxedo Application Rehosting Workbenchでは、CONVERTMWコピー・ファイルに基づいてhexa-mapファイルを生成するスクリプトを使用できます。「コードセットの変換」の「COBOL CONVERTMW.cpyファイルの使用」を参照してください。
hexa-mapファイルを生成するスクリプトは、次のディレクトリに配置されます。
REFINEDIR/scripts/
スクリプト名は次のとおりです。
convert-hexa-copy-to-map.sh
構文
REFINEDIR/scripts/convert-hexa-copy-to-map.sh convertmw_copy_file
convertmw_copy_file: location of the CONVERTMW.cpy file
このスクリプトでは、tr-hexa.mapファイルが自動的に現在のディレクトリに生成されます(PARAMディレクトリの方が適切な選択です)。この生成されたファイル名は、hexa-map-file属性とともにfile-path値として使用する必要があります。
正常終了すると、リターン・コード0が返されます。それ以外の場合、表示されたメッセージおよびtr-hexa.mapファイルの内容を参照してください。
エラー・メッセージ
WBART-1001:
例: コピー・ファイル<filename>が見つかりません。引数1をチェックしてください。
説明: 引数1にはCONVERTMW COBOLコピー・ファイル名が含まれます。
WBART-1003:
例: awkによって異常なステータスが返されました
説明: tr-hexa.mapファイルに書き込まれたメッセージを参照してください
メッセージは次のようになります。
TRANSCODE-[SOURCE | CIBLE]にFILLERが多すぎます
フィラー番号idに、十分なhexa要素が含まれていません: 64ではなくnum
TRANSCODE-SOURCEまたはTRANSCODE-CIBLE(あるいはその両方)に十分なFILLERがありません
File-to-RDBMS構成ファイル
これらのファイルは、conv-ctrl-file句およびalt-key-file句に関連します。これらには、file-to-RDBMS変換に関する情報が含まれます。たとえば、どの論理ファイル(FD)をRDBMS表に変換するかを定義するための情報です(実際、論理ファイルが関連する物理ファイルがそのようなDB表に変換されるため)。これらのファイルはTuxedo ART Workbench File-to-Oracle変換ツールによって自動的に生成されるため、手動で変更しないでください。内容をさらにここで指定することはありません。
RDBMS変換構成ファイル
これらのファイルは、前述のRDBMS-conversion-file句に関連します。含まれる情報には次のように2つのレベルでアクセスできます。
最上位レベルのファイルの名前は、RDBMS-conversion-file句で適切に付けられます。これにはCSV表が次の行形式で含まれます。
schema-name;file-path.
file-pathは、SQLスキーマschema-nameに関するRDBMS変換情報を含むファイルのパスです。通常どおり、絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します。このファイルは、Tuxedo ART Workbenchユーザーが作成する必要があります。
キーワード・ファイル
このファイルは、keywords-file句に関連します。内容は、セミコロンが区切り文字として使用されるLISPのような表です。各行の形式を次に示します。
old-name;new-name.
このような行により、すべてのプログラムにおけるold-nameという名前のすべてのCOBOL識別子(変数名、パラグラフ名など)が、new-nameという名前に変更されます。これは、ターゲットのCOBOLダイアレクトでキーワードまたは予約語に相当する名前(TESTなど)に関して必要ですが、リエンジニアリングの目的で単純な識別子を名前変更するときにも役立つことがあります。
ストアド・プロシージャ・ファイル
このファイルは、sql-stored-procedures-file句に関連します。内容は、1行に1つずつ記述されたサブプログラム名のリストです。これらの名前のうち1つがCOBOL CALL文に含まれると、SQL CALL文で置換されます。さらに、CALLのパラメータの宣言(ある場合)がSQL文で使用できるように調整されます。
purely-sequential構成ファイル
このファイルは、pure-seq-map-file句に関連します。内容は、セミコロンが区切り文字として使用されるCSV表です。各行の形式を次に示します。
program-name;FD-name
どちらの名前も記号です。このような行により、ソース・プラットフォームで(レコード) SEQUENTIALであると想定される特定の論理ファイル(所定のプログラムの所定のFD)がターゲット・プラットフォームでLINE SEQUENTIALに変換されることがなくなります。つまり、変更されずにレコードSEQUENTIALファイルのままになります。こうすることで、このファイルは標準のターゲットプラットフォーム・ユーティリティでの処理に対応しにくくなりますが、無制限のREWRITE操作をサポートします(前のLINE SEQUENTIALファイルに対するREWRITE操作に関する項を参照してください)。これは、z/OSプラットフォームからバイナリ形式で交換されるファイルでも有効です。
sql-return-codes構成ファイル
このファイルは、sql-return-codes-file句に関連します。内容は、セミコロンが区切り文字として使用されるCSV表です。各行の形式を次に示します。
DB2-sqlcode-value;Oracle-sqlcode-value
値はどちらも正または負の整数です。このような行により、特徴的なDB2 SQLCODE値を対応するOracle SQLCODE値にマップするために使用される変換表に値のペアが追加されます。この変換表は、次のファイルから読み取ったように初期化されます。
リスト10-5 DB2からOracle SQLへのリターン・コードのマッピング
+100;+1403
-810;-1422
-803;-1
-530;-2291
-516;-1002
-501;-1001
-407;-1451
-305;-1405
-180;-1820
-181;-1821
-811;-2112
-204;-942
-911;-51
-911;-60
-532;-2292
 
もちろん、値0は0にマップされます。
注意:
COBOLコンバータでは現在、この変換表の一貫性はチェックされません。1つのDB2値が複数のOracle値にマップされている可能性があります。上のリストからわかるように、-911-51-60の2つの値にマップされています。また、たとえばIF SQLCODE = -911IF SQLCODE = -51 OR -60に変換できます。
sql-return-codes構成ファイルを指定しない場合、リスト10-5のマッピングがデフォルトとして使用されるため、sql-return-codes-file句が存在しないときには、このリストの設定が有効になります。独自のsql-return-codes構成ファイルを指定した場合は、その設定によってデフォルトの設定がオーバーライドされます。
list-of-cics構成ファイル
このファイルは、前述のlist-of-cics-file句に関連します。その内容はCICSプログラムの名前で、プログラムが1行に1つずつ記述されます。このファイルで定義されたプログラムは、CICSプログラムとみなされます。CICSプログラム(MAIN1)に次のコード・スニペットがあるとします。
CALL "SUB1".
CALL "SUB2".
SUB1SUB2は、両方ともCICSプログラムです。しかし、パフォーマンスを向上させるため、MAIN1SUB1SUB2を別々のプロジェクト、たとえば、MAIN1SUB1をプロジェクト1、SUB2をプロジェクト2に分割することもあります。この場合、ART Workbenchは、プロジェクト1ではSUB2がCICSプログラムであることがわからないため、前述のコードを次のように変更します。
CALL "SUB1" USING DFHEIBLK DFHCOMMAREA.
CALL "SUB2".
しかし、期待されるターゲット・コードは次のものです。
CALL "SUB1" USING DFHEIBLK DFHCOMMAREA.
CALL "SUB2" USING DFHEIBLK DFHCOMMAREA.
この例を処理するには、SUB2をプロジェクト1のlist-of-cics構成ファイル内に構成します。
出力ファイルの説明
変換されるプログラムとコピー・ファイル
ネーミング方式
前述のように、Tuxedo ART Workbench COBOLコンバータの主な目的は、変換されたCOBOLコンポーネントをソース・ファイルの形式で生成することです。ソース・ルート・ディレクトリ内のメイン・プログラム・ファイルの階層とターゲット・ルート・ディレクトリ内のメイン・プログラム・ファイルの階層の間には、1対1の直接の対応があります。ファイル名に関するかぎり、異なる可能性があるのは、CALL-renamingマップとターゲットのprogram-file拡張子の選択によるもののみです。「rename-call-map-file句」および「keep-same-file-names、target-program-extensionおよびtarget-copy-extension句」を参照してください。これは、ターゲットのコピー・ファイルについても該当しますが、次の点に注意してください。
COPY-renamingマップとターゲットのcopy-file拡張子の選択により、ターゲット・コピー・ファイルの名前がソース・ファイルのものと異なることがあります。
ファイルORIGCOPY(.s-ext)が複数のバージョンに変換されると、それらのバージョンにはORIGCOPY(.t-ext)ORIGCOPY_V1(.t-ext)ORIGCOPY_V2(.t-ext)などのように名前が付けられます。
変換コメント
ターゲット・プラットフォームのCOBOLはソース・プラットフォームのCOBOLとそれほど変わらないため、原則として、COBOLの変換は容易なプロセスです。このプロセスが翻訳ではなく変換と呼ばれるのはそのためです。実際、変換されたファイル(メイン・ファイルまたはコピー・ファイル)が対応するソース・ファイルと異なるのは、一般にごく少ない箇所のみです。内容の大部分は何も影響を受けずに、ソース・ファイルとまったく同じ状態でターゲット・ファイルに再生成されます。ただし、異なる箇所は特定の変換コメントで示されます。
コードの変更
なんらかの変換が実際に行われた箇所では、コンバータによって、変換の影響を説明する変換コメントが挿入されます。影響を受けるコードの内容は次のとおりです。
リスト10-6 変換コメントの例
*{ tr-binary-to-comp-5 1.2
* 77 MY-VAR PIC S9(9) COMP.
*--
77 MY-VAR PIC S9(9) COMP-5.
*}
 
コードの追加
ルールによっては、既存のコードが変換されるのみでなく、Working-Storage Sectionでの中間変数の宣言など、離れた箇所にまったく新しいコードが挿入されることがあります。この場合、プログラム内の影響を受ける領域は次のとおりです。
transformation-ruleの名前とバージョンを示すヘッダー行。ヘッダー行は接頭辞*+{で始まり、中カッコが変換の開始を示し、プラス記号は、これが変換ではなく挿入であることを示します。
コードの削除
ルールによってコードが変更されるのではなくただ削除されると、プログラム内の影響を受ける領域には、変更されるコードと同じ内容が配置されますが、新しいコードの部分は空になります。
コードの移動
ルールによっては、プログラム内のある箇所から別の箇所にコードが移動されることがあり、たとえば、ファイルがリレーショナルDB表に移行されると、対応するFDは削除され、それに含まれるデータ・レコードはWorking-Storage Sectionに移動されます。この場合、元の場所のコードは削除として示され、新しい場所のコードは挿入として示されます。
その他のコメント・ルール
レイアウト
COBOLコンバータが変換ルールをコードの一部に適用する際、元のバージョンと新しいバージョンの両方に存在するコードの要素の移動を最小限に抑えることで、新しいコードでも同じレイアウトを保とうとします。また、コンバータが新しい要素(文や変数の宣言など)を挿入する際には、新しい要素の位置を前後の同様のものに揃えようとします。このようなガイドラインに従うことで、変換されたコード行や新しいコード行が固定形式に対して長くなりすぎた場合、コンバータは、最も右側の適切な位置(なるべく2つの語の間)で行を切り、残りを次の行に折り返しますが、その際、折り返された要素が論理的に前の行の一部であることを示すために、右マージンに揃えます。
その他の問題
メイン・プログラム・ファイルでREPLACING句で呼び出されるコピー・ファイルをコンバータが出力するとき、置換の影響を元に戻すために特別な処理を行います。ただし、コンバータによって実行される変換が、なんらかの置換によって生成されたテキストの部分に適用される場合、コンバータが逆の変換を計算して、変換された置換句を作成することが非常に難しくなる可能性があります。たとえば、COPY句によって「何か」が「無」によって置換されたとき、領域が変換の影響を受けていれば、コンバータは「何か」の置換を戻すための「無」をなかなか見つけられないことがあります。このようなケースでは、手動での修正が必要になる可能性があります。ポストトランスレーション機能を使用して、繰返し可能な方法でそれを適用してください。
コンパイラ・オプション
ソース・プログラムと、COBOLコンバータによって生成されたターゲット・プログラムの間で同じ動作を保証するには、これまでに説明した制限を踏まえて、ターゲット・プログラムをコンパイルするときにコンパイラ・オプションの特定のセットを設定する必要があります。実際、ターゲットCOBOLコンパイラの一部のオプションにより実行コードの動作が変わります。そのため、Tuxedo ART Workbench COBOLコンバータによって適用された変換を、次に示すオプション・セットに合うように調整します。異なる(少なくとも相反する)オプション・セットでコンパイルされたプログラムについてはサポートは提供されません。詳細は、Micro Focus COBOLのドキュメント、特にコンパイラ・ディレクティブ・ブックおよびCOBOL-IT Compiler Suite Enterprise Editionのリファレンス・マニュアルを参照してください。
Micro Focus COBOL
必須オプション
必須のコンパイラ・オプションを次にリストします。それぞれについて、デフォルトで設定されるかどうかを記載し、簡単な説明とそれを必須としている理由を示します。
DIALECT"MF" (デフォルト)
最もネイティブで効率的な操作モードを設定します。Tuxedo ART Workbenchの目的は、ソース・メインフレームをエミュレートするのみでなく、それにとらわれずにターゲット・プラットフォームのメリットを活用することであるため、これは最適な選択です。これにより、Unicodeサポートやオブジェクト指向プログラミングなど、Micro Focus COBOLの最新機能を使用できるようになります。
CHARSET"ASCII" (デフォルト)
デフォルトの文字セットとコレーティング・シーケンスを、ターゲット・プラットフォームでネイティブにサポートされるものに設定します。これも明らかな選択です。
SOURCEFORMAT"FIXED" (デフォルト)
古い標準、固定形式および列ベース形式に従うようコンパイラに指示します。これは、最新化という目的に反するように見えますが、残念ながらOracle Pro*COBOLコンパイラは最新の11gバージョンでさえMicro Focus COBOLのフリー形式との互換性が低いため、正確な動作を保証するために固定形式を必要とします。
ALIGN"8" (デフォルト)
最上位構造(01および77レベル)のアライメントを定義します。構造がソース・プラットフォームと同じレイアウトを維持するようにするために必要で、メモリー・サイズを多少消費しますが、最適なパフォーマンスを得られます。
COMP5-BYTE-ORDER"NATIVE" (デフォルト)
COMP-5変数のネイティブ・バイト・オーダーを使用します。C言語およびOracle Tuxedo Application Runtimeとの互換性のために必要です。
P64(明示的に設定、Micro Focus COBOLインストール・セットアップ以外でのデフォルトの64ビット・モード・コンパイル)
64ビット・プラットフォーム用にコンパイルします。Tuxedo ART Workbenchでサポートされるすべてのターゲット・プラットフォームは64ビットです。
SIGN"EBCDIC"(明示的に設定)
DISPLAY数値についてオーバーパンチ符号を表すためにASCII規約ではなくEBCDIC規約を使用します。これは、ソース・プラットフォームと同じ規約であるため、このような数値の最後の桁が文字変数によって再定義された場合に動作が大きく変化しません。
DEFAULTBYTE"00"(明示的に設定、前のオプションが指定される場合以外)
Working-Storage Sectionにおける未定義のすべての変数を初期化するための値を指定します。ソース・プラットフォームでは、Working-Storage Sectionは公式には暗黙に初期化されないことになっているため、厳密には必要ではありませんが、数値変数を文字変数で再定義すると動作の違いが少なくなることがわかっています。
RWHARDPAGE(明示的に設定)
最後の項目がページに印刷された後で、Report Writer制御モジュールが、複数の空白行を出力する通常の処理のかわりにフォーム・フィードを実行します。すべてのUNIXプリンタ・システムはForm Feed文字を正しく処理します。
INDDまたはINDD"SYSIN80L"(明示的に設定)
デフォルトのACCEPT文が、UNIXの標準入力ファイルではなく、指定した論理ファイルから読み取るようにします。これはソース・プラットフォームと同じ動作であり、ART変換されたKSHスクリプトに適しています。このスクリプトは、SYSINをCOBOLプログラムの他のファイルと同様に扱います。
OUTDDまたはOUTDD"SYSOUT80L"(明示的に設定)
デフォルトのDISPLAY文が、UNIXの標準出力ファイルではなく、指定した論理ファイルに書き込むようにします。これはソース・プラットフォームと同じ動作であり、Tuxedo ART Workbenchで変換されたKSHスクリプトに適しています。このスクリプトは、SYSOUTをCOBOLプログラムの他のファイルと同様に扱います。
HOSTARITHMETIC、HOST-NUMMOVE"2"、HOST-NUMCOMPARE"2"、ARITHMETIC"ENTCOBOL"、CHECKDIV"ENTCOBOL"、FP-ROUNDING"ENTCOBOL"、REMAINDER"2"(明示的に設定)
これらのオプションはすべて、数値変数と数値表現の様々な処理を制御します。これらを設定することで、ソース・プラットフォームとの互換性が最大化されます。
IBMCOMP(明示的に設定)
構造のレイアウトについて、ソース・プラットフォームと同じモードであるword-storageモードをオンにします。また、これによってSYNC[HRONIZED]句がマシン固有型(バイナリ整数、バイナリ浮動小数点、ポインタなど)に対して有効になり、メモリー消費が少し増加しますが、最高のパフォーマンス効率を得られます。
ODOSLIDE(明示的に設定)
同じレコード内の可変長表の長さが変わると、その後のデータ項目を移動します。これは、同じレコード内の可変長表の後にあるデータ項目に影響します。つまり、OCCURS DEPENDING句が付いた項目の後にあるが、それには従属しない項目です。ODOSLIDEでは、これらの項目は表のサイズに関係なく常に表の直後に続きます。つまり、表のサイズが変わるとアドレスが変わります。NOODOSLIDEでは、これらの項目のアドレスは固定されており、表の最大長として割り当てられた領域が終了してから開始します。ODOSLIDEを設定すると、ソース・プラットフォームと同じ動作になります。
PERFORM-TYPE"ENTCOBOL"(明示的に設定)
範囲が重なるPERFORM文のネストに関してソース・プラットフォームと同じ動作を実現します。デフォルト・オプションPERFORM-TYPE"MF"はセマンティックがよりクリーンで、実行の効率は高くなりますが、動作が変化する可能性があります。これは検出および診断が困難なため、PERFORMの範囲の動作に問題がなく、範囲が重なっていないことが明らかでないかぎり、デフォルト設定はお薦めしません。
RDW(明示的に設定)
FDの最初のレコードの直前にある隠された長さ変数を提供して、可変長シーケンシャル・ファイルから読み取ったばかりのレコードの長さを知ることができます(詳細はMicro Focus COBOLのドキュメントを参照)。この方法はソース・プラットフォームで使用できます。このオプションは強く推奨されてはいませんが、これを使用すると同じ動作を再現できます。
RECMODE"ENTCOBOL"(明示的に設定)
Micro Focus COBOLコンパイラがソース・コンパイラと同じアルゴリズムを使用して、ファイルが固定長形式か可変長形式(ファイル定義の様々なレコードの長さに基づく)かを判別するように指示します。
ASSIGN"EXTERNAL"(明示的に設定)
デフォルトでEXTERNALファイル割当て方法を使用するようMicro Focus COBOLコンパイラに指示します。この方法では、SELECT名が、DD_NAMEという形式の環境変数で実際のファイル名を、探すためのキーとして使用されます。これは、ファイル割当てをプログラムの外部に指定できる(すなわちKSHスクリプトの呼出し)Tuxedo ART Workbenchのために選択するモードです。これは概念においてソースの動作に似ているだけではなく、最も柔軟性の高い方法です。
SYSPUNCH"80"(明示的に設定)
SYSPUNCH論理ファイルのレコード長を定義します。デフォルト設定(132)はソース・プラットフォームの設定と異なります。
ZEROLENGTHFALSE(明示的に設定)
ZEROLENGTHFALSEを設定すると、ゼロ長のグループ項目間、およびゼロ長の項目と表意定数の間の比較はすべてfalseを返します。設定しない場合、それらはすべてtrueを返します。ソース・プラットフォームと同じ動作を再現するには設定する必要があります。
NOADV (デフォルト)
テキスト・ファイルの特殊なプリンタ制御文字を使用しません。ターゲット・プラットフォームの印刷ユーティリティにより、画面表示と同じレイアウトでファイルが印刷されます。
NOTRUNCCALLNAME (デフォルト)
CALL文で参照されるサブプログラムの名前を切り詰めません。これは、Tuxedo ART Workbenchで移行したアセットで必要です。Tuxedo ART Workbenchによって生成されるデータ・アクセス・ルーチンの名前はロング・ネームであるためです。また、将来的にアセットを活用するためにも、ソース・プラットフォームで課せられていた名前の長さ制限を排除することをお薦めします。
NOTRUNCCOPY (デフォルト)
COPYディレクティブで参照されるコピー・ファイルの名前を切り詰めません。これは、Tuxedo ART Workbenchで移行したアセットで必要です。Tuxedo ART Workbenchによって生成または挿入されるコピー・ファイルの名前はロング・ネームであるためです。また、将来的にアセットを活用するためにも、ソース・プラットフォームで課せられていた名前の長さ制限を排除することをお薦めします。
NOCOPYLBR (デフォルト)
コピー・ファイル名をライブラリ・アーカイブ(.lbrファイル)ではなく、単純なパスとして扱います。これは、Tuxedo ART Workbenchで移行されるアセットで必要です。Tuxedo ART Workbenchによって変換または生成されるコピー・ファイルはアーカイブとしてグループ化されないためです。
NOSPZERO / NOSIGN-FIXUP (デフォルト)
NOSIGN-FIXUPは、HOST-NUMCOMPAREおよびHOST-NUMMOVEディレクティブを使用するときに、メインフレームのコンパイラ・オプションNUMPROC(PFD)のエミュレーションを提供します。このオプションでは、NUMPROC(NOPFD)動作の完全なエミュレーションを提供できませんが、最高のパフォーマンスを実現します。
REPORT-LINE"256" (デフォルト)
Report Writer行の最大長を指定します。
COPYEXT"cpy,cbl"(明示的に設定)
COPY文のファイル名が拡張子なしで指定された場合に、コンパイラが探すためのコピー・ファイルのファイル名拡張子を指定します。Tuxedo ART Workbenchによって生成されるコピー・ファイルには常に.cpy拡張子が付いており、Tuxedo ART Workbenchによって変換されるコピー・ファイルにも通常は同じ拡張子が付いているため、このデフォルトではない設定はASTで移行されたアセットに適しています。ただし、別の拡張子についてCOBOLコンバータを構成する場合は、それに応じてこのオプションの設定を調整する必要があります。
デフォルト・オプションと明示的なオプションおよび依存関係を考慮すると、必須オプション・リストを次のように開始できます。
リスト10-7 検証済COBOLコンパイラ・オプション・リスト
P64 SIGN"EBCDIC" RWHARDPAGE INDD OUTDD HOSTARITHMETIC HOST-NUMMOVE"2"
HOST-NUMCOMPARE"2" ARITHMETIC"ENTCOBOL" CHECKDIV"ENTCOBOL"
FP-ROUNDING"ENTCOBOL" IBMCOMP ODOSLIDE PERFORM-TYPE"ENTCOBOL" RDW
RECMODE"ENTCOBOL" REMAINDER"2" ASSIGN"EXTERNAL" SYSPUNCH"80"
ZEROLENGTHFALSE COPYEXT"cpy,cbl"
 
前述のものと相反するオプション・リストを使用してコンパイルしたプログラムについては保証されません。Oracle Tuxedo Application Rehosting WorkbenchおよびOracle Tuxedo Application Runtime for CICSの現在のバージョンは、このオプション・リストで検証されています。
注意:
Pro*COBOLプリプロセッサ用のOracle SQL必須コンパイル・オプションのリストは、『ART Workbench RDBMSコンバータ・リファレンス・ガイド』を参照してください。
注意:
インストール依存オプション
次のオプションは厳密には必要ではありませんが、大文字と小文字が混在するプログラムが含まれるアセットの処理に役立つことがあります。
FOLDCALLNAME"UPPER"(明示的に設定)
CALL文のサブプログラム名を大文字にマップするようコンパイラに指示します。
FOLDCOPYNAME"UPPER"(明示的に設定)
COPYディレクティブのコピー・ファイル名を大文字にマップするようコンパイラに指示します。
MAPNAME(明示的に設定)
コンパイラが、ソース・プラットフォームと互換性を持つようにプログラム名とエントリポイント名を変更します。
これらの設定を試すことで、特定のアセットに適した組合せがわかります。たとえば、FOLDCALLNAME"UPPER"MAPNAMEを一緒に設定すると、ソースコンパイラのオプションPGMNAME(COMPAT)の適切なエミュレーションを得られますが、このオプションの別の値をエミュレートする確実な方法はありません。
1.1.1.3 顧客の選択に基づくオプション
次のオプションはターゲット・アセットの動作に影響しますが、ARTシステムのユーザーの意思によって設定できます。
BOUNDおよびSSRANGE
配列にアクセスするとき、または参照修飾子において、各索引が正しい境界の間にあることをチェックします。これは、IBMコンパイラのSSRANGEオプションに似ています。少なくとも移行テストと運用開始直後の数か月は、これら両方のオプションを設定することを強くお薦めします(SSRANGEを設定するとBOUNDも設定されることに注意してください)。この選択には少し問題があります。それは、ソース・プラットフォームで正しく実行しているように見えるいくつかのプログラム(SSRANGEオプションなし)が停止することがあるためです。ただし、経験によると、停止するプログラムはソース・プラットフォームで偶然作動できていた誤ったプログラムのみです。ターゲット・プラットフォームでは同様に作動しないか、まったく作動しません。このようなプログラムの検出と修正は早く行うのに越したことはありません。同じく、CHECKオプションの設定も検討してください。これは、様々な(他の)実行時チェックを有効にし、他の一見正常なプログラムを検出できます。
TRUNC
値をBINARY変数(またはCOMP、あるいはCOMP-4)に割り当てたときに、指定されたPICサイズの切捨てが行われるかどうかを指定します。これは、IBMコンパイラのTRUNC(STD)オプションに似ています。ただし、ART COBOLコンバータの現在の仕様では、そのようなすべての変数はCOMP-5変数に変換され、この変数はTRUNCオプションの対象になりません。前述の「COMP-5型およびTRUNCコンパイラ・オプションの使用」での説明を参照してください。
APOSTおよびQUOTE
QUOTE記号定数が単一引用符と二重引用符のどちらの文字を表すかを選択できます。これは同名のIBMオプションと似ています。ソース・プラットフォームと同じ設定を使用します。
NOALTER
COBOLプログラムでのALTER文の存在を禁止します。ALTER文は以前使用されていましたが、存在している場合は深刻な問題になります。ART Workbenchでアセットを移行する機会に、残っているALTERがあれば削除してしまうことをお薦めします。その後、このオプションを設定して再び使用しないようにし、コンパイルされたコードの効率と安全性を高めます。
AREACHECK
Procedure Divisionで領域Aから開始するすべてのトークンを直前のトークンにかかわらずパラグラフまたはセクション・ラベルとしてコンパイラで扱います。AREACHECKを指定しないと、ピリオドの後のトークンのみがラベルとして扱われます。このディレクティブによりIBMのエラー処理(ラベルの前のピリオドが省略されていても、深刻度の低いメッセージが生成される)との互換性が高まります。そのようなエラーを招くソース・コードは修正することをお薦めします。
NOBYTEMODEMOVE
重なっているデータ項目間での英数字データの移動動作を制御します。BYTE-MODE-MOVEが指定される場合、データはソースからターゲットに一度に1バイトずつ移動します。NOBYTE-MODE-MOVEが指定される場合、データは(環境に応じて)一度に2バイトや4バイト(またはそれ以上)のグラニュルでソースからターゲットに移動します。結果として、重なりがグラニュル・サイズよりも小さい場合は、グラニュルを移動するたびに次に移動するグラニュルの一部が上書きされます。NO-BYTE-MODE-MOVEではパフォーマンスが向上しますが、ソース・プラットフォームで正しく作動しているごく一部のプログラムに正しくないコードが生成されることがあります。比較的互換性が高い設定(BYTE-MODE-MOVE)から開始し、完全なリグレッション・テストを満足できるまで実行してから、他のオプションを選択して再テストすることをお薦めします。
DYNAM
CANCEL文が無視されないことを指定します。これは同名のIBMオプションに似ています(まったく同じではありません。Micro Focus COBOLのドキュメントを参照してください)。このオプションの設定を強くお薦めします。応用CICSプログラムを実行するART TP Run-timeシステム内のTuxedoサーバーは、CANCEL文を使用して、それらのプログラムのロードと実行に使用されたメモリーを解放するためです。NODYNAMが有効になっていると、それらのサーバーが違うプログラムを実行するにつれ使用されるメモリー容量は増加し続けます。
NOFDCLEARおよびNOHOSTFD
これらのオプションを有効に設定すると、IBMコンパイラによるFD使用方法の制限が再現されます(FDレコードはOPEN時にのみ割り当てられ、レコードの内容はWRITEの後に失われるなど)。このような制限には意味がないと考え、これらのオプションは使用しないことをお薦めします。
NATIVEFLOATINGPOINT
前述の「浮動小数点変数の使用」の説明を参照してください。
NOSEG
セグメント化をオフにし、すべてのセグメント番号を無視します。結果として生成されるプログラムは、オーバーレイなしの1つのプログラムになります。セグメント化は現在ほとんど使用されません。
STICKY-LINKAGE"2" / NOSTICKY-LINKAGE
このオプションは、現在の呼出しで新しいリンクが指定されない(実際の引数が指定されない)場合に、プログラムの前の呼出しで実際のデータ項目にリンクされたプログラム・パラメータ(Linkage Sectionの項目)が同じ項目に再リンクされるかどうかを制御します。STICKY-LINKAGE"2"設定は、特にCICSプログラムに関してソース・プラットフォームの動作との互換性は比較的高いのですが、標準ではなくエラーが発生しやすい傾向があります。また、これはART TPランタイム・システムの特定の機能(特に、共有メモリーのない1つのクラスタ内で実行するいくつかのサーバー上にTPトランザクションを分散する機能)との互換性がない場合があります。このため、最初からデフォルトのNOSTICKY-LINKAGE設定を使用し、リグレッション・テストで検出されるsticky-linkage関連の不具合を修正することを強くお薦めします。また、前述の「NULLアドレスのLinkage-Section引数」を参照してください。
1.1.1.4 コンパイル時の操作に影響するオプション
次のオプションはコンパイル・リストの生成のみに影響します。自由に選択できます。
LIST
コンパイル・リストの場所と形式を指定します。
SETTINGS
コンパイル・リストにすべてのコンパイラ・オプションのリストを含めるかどうかを指定します。
TRACE
トレースに関する文(READY TRACEおよびRESET TRACE)に従うかどうかを指定します。
WARNING
コンパイル・リストに出力されるエラー・メッセージの冗長性を指定します。
FLAG “dialect
コンパイラが、指定されたCOBOLダイアレクトに含まれない構文を検出したときに、言語レベル証明フラグを生成する必要があるかどうかを指定します
必須オプション
必須のコンパイラ・オプションを次にリストします。それぞれについて、デフォルトで設定されるかどうかを記載し、簡単な説明とそれを必須としている理由を示します。
DIALECT"MF" (デフォルト): 最もネイティブで効率的な操作モードを設定します。Oracle ARTの目的は、ソース・メインフレームのエミュレートのみではなく、メインフレームにとらわれずにターゲット・プラットフォームのメリットを活用することであるため、これは最適な選択です。Unicodeサポートやオブジェクト指向プログラミングなど、Micro Focus COBOLの最新機能を使用できるようになります。
CHARSET"ASCII" (デフォルト): デフォルトの文字セットとコレーティング・シーケンスを、ターゲット・プラットフォームでネイティブにサポートされるものに設定します。これも明らかな選択です。
SOURCEFORMAT"FIXED" (デフォルト): 古い標準、固定形式および列ベース形式に従うようコンパイラに指示します。これは、最新化という目的に反するように見えますが、残念ながらOracle Pro*COBOLコンパイラは最新の11gバージョンでさえMicro Focus COBOLのフリー形式との互換性が低いため、正確な動作を保証するために固定形式を必要とします。
ALIGN"8" (デフォルト): 最上位構造(01および77レベル)のアライメントを定義します。構造がソース・プラットフォームと同じレイアウトを維持していることを確認するために必要です。メモリー・サイズのためにコストが若干かかりますが、最適なパフォーマンスを得られます。
COMP5-BYTE-ORDER"NATIVE" (デフォルト): COMP-5変数のネイティブ・バイト・オーダーを使用します。C言語およびART TPランタイム・システムとの互換性のために必要です。
P64 (明示的に設定): 64ビット・プラットフォーム用にコンパイルします。ARTでサポートされるすべてのターゲット・プラットフォームは64ビットです。
SIGN"EBCDIC" (明示的に設定): DISPLAY数値についてオーバーパンチ符号を表すためにASCII規約ではなくEBCDIC規約を使用します。これは、ソース・プラットフォームと同じ規約であるため、このような数値の最後の桁が文字変数によって再定義された場合に動作が大きく変化しません。
DEFAULTBYTE"00" (明示的に設定、前のオプションが指定される場合以外): Working-Storage Sectionにおける未定義のすべての変数を初期化するための値を指定します。ソース・プラットフォームでは、Working-Storage Sectionは公式には暗黙に初期化されないことになっているため、必ずしも必要ではありません。ただし、数値変数を文字変数で再定義すると動作の違いが少なくなることがわかっています。
RWHARDPAGE (明示的に設定): 最後の項目がページに印刷された後で、Report Writer制御モジュールが、複数の空白行を出力する通常の処理のかわりにフォーム・フィードを実行します。すべてのUNIXプリンタ・システムはForm Feed文字を正しく処理します。
INDDまたはINDD"SYSIN80L" (明示的に設定): デフォルトのACCEPT文が、UNIXの標準入力ファイルではなく、指定した論理ファイルから読み取るようにします。これはソース・プラットフォームと同じ動作であり、ART変換されたKSHスクリプトに適しています。このスクリプトは、SYSINをCOBOLプログラムの他のファイルと同様に扱います。
OUTDDまたはOUTDD"SYSOUT80L" (明示的に設定): デフォルトのDISPLAY文が、UNIXの標準出力ファイルではなく、指定した論理ファイルに書き込むようにします。これはソース・プラットフォームと同じ動作であり、ART変換されたKSHスクリプトに適しています。このスクリプトは、SYSOUTをCOBOLプログラムの他のファイルと同様に扱います。
HOSTARITHMETICHOST-NUMMOVE"2"、HOST-NUMCOMPARE"2"、ARITHMETIC"ENTCOBOL"、CHECKDIV"ENTCOBOL"、FP-ROUNDING"ENTCOBOL"、REMAINDER"2" (明示的に設定): これらのオプションはすべて、数値変数と数値表現の様々な処理を制御します。これらを設定することで、ソース・プラットフォームとの互換性が最大化されます。
IBMCOMP (明示的に設定): 構造のレイアウトについて、ソース・プラットフォームと同じモードであり、メモリー消費が少し増加しますが、最高のパフォーマンス効率を得られるものでもあるword-storageモードをオンにします。
ODOSLIDE (明示的に設定): 同じレコード内の可変長表の長さが変わると、その後のデータ項目を移動します。これは、同じレコード内の可変長表の後にあるデータ項目に影響します。つまり、OCCURS DEPENDING句が付いた項目の後にあるが、その項目には従属しない項目です。ODOSLIDEでは、これらの項目は表のサイズに関係なく常に表の直後に続きます。つまり、表のサイズが変わるとアドレスが変わります。NOODOSLIDEでは、これらの項目のアドレスは固定されており、表の最大長として割り当てられた領域が終了してから開始します。ODOSLIDEを設定すると、ソース・プラットフォームと同じ動作になります。
PERFORM-TYPE"ENTCOBOL" (明示的に設定): 範囲が重なるPERFORM文のネストに関してソース・プラットフォームと同じ動作を実現します。デフォルト・オプションPERFORM-TYPE"MF"はセマンティックがよりクリーンで、実行の効率は高くなりますが、動作が変化する可能性があります。これは検出および診断が困難なため、PERFORMの範囲の動作に問題がなく、範囲が重なっていないことが明らかでないかぎり、デフォルト設定はお薦めしません。
RDW (明示的に設定): FDの最初のレコードの直前にある隠された長さ変数を提供して、可変長シーケンシャル・ファイルから読み取ったばかりのレコードの長さを知ることができます(詳細はMicro Focus COBOLのドキュメントを参照)。この方法はソース・プラットフォームで使用できます。このオプションは強く推奨されてはいませんが、これを使用すると同じ動作を再現できます。
RECMODE"ENTCOBOL" (明示的に設定): Micro Focus COBOLコンパイラがソース・コンパイラと同じアルゴリズムを使用して、ファイルが固定長形式か可変長形式(ファイル定義の様々なレコードの長さに基づく)かを判別するように指示します。
ASSIGN"EXTERNAL" (明示的に設定): デフォルトでEXTERNALファイル割当て方法を使用するようMicro Focus COBOLコンパイラに指示します。この方法では、SELECT名が、DD_NAMEという形式の環境変数で実際のファイル名を、探すためのキーとして使用されます。これは、ファイル割当てをプログラムの外部に指定できる(すなわちKSHスクリプトの呼出し)ARTのために選択するモードです。これは概念においてソースの動作に似ているだけではなく、最も柔軟性の高い方法です。
SYSPUNCH"80" (明示的に設定): SYSPUNCH論理ファイルのレコード長を定義します。デフォルト設定(132)はソース・プラットフォームの設定と異なります。
ZEROLENGTHFALSE (明示的に設定): ZEROLENGTHFALSEを設定すると、ゼロ長のグループ項目間、およびゼロ長の項目と表意定数の間の比較はすべてfalseを返します。設定しない場合、それらはすべてtrueを返します。ソース・プラットフォームと同じ動作を再現するには設定する必要があります。
NOADV (デフォルト): テキスト・ファイルの特殊なプリンタ制御文字を使用しません。ターゲットプラットフォームの印刷ユーティリティにより、画面表示と同じレイアウトでファイルが印刷されます。
NOTRUNCCALLNAME (デフォルト): CALL文で参照されるサブプログラムの名前を切り詰めません。これは、ARTで移行したアセットで必要です。ARTによって生成されるデータ・アクセス・ルーチンの名前はロング・ネームであるためです。また、将来的にアセットを活用するためにも、ソース・プラットフォームで課せられていた名前の長さ制限を排除することをお薦めします。
NOTRUNCCOPY (デフォルト): COPYディレクティブで参照されるコピー・ファイルの名前を切り詰めません。これは、ARTで移行したアセットで必要です。ARTによって生成または挿入されるコピー・ファイルの名前はロング・ネームであるためです。また、将来的にアセットを活用するためにも、ソース・プラットフォームで課せられていた名前の長さ制限を排除することをお薦めします。
NOCOPYLBR (デフォルト): コピー・ファイル名をライブラリ・アーカイブ(.lbrファイル)ではなく、単純なパスとして扱います。これは、ARTで移行されるアセットで必要です。ARTによって変換または生成されるコピー・ファイルはアーカイブとしてグループ化されないためです。
REPORT-LINE"256" (デフォルト): Report Writer行の最大長を指定します。
COPYEXT"cpy,cbl" (明示的に設定): COPY文のファイル名が拡張子なしで指定された場合に、コンパイラが探すためのコピー・ファイルのファイル名拡張子を指定します。このデフォルトではない設定はASTで移行されたアセットに適しています。ARTによって生成されるコピー・ファイルには常に.cpy拡張子が付いており、ARTによって変換されるコピー・ファイルにも通常は同じ拡張子が付いているためです。ただし、別の拡張子についてCOBOLコンバータを構成する場合は、それに応じてこのオプションの設定を調整する必要があります。
デフォルト・オプションと明示的なオプションおよび依存関係を考慮すると、必須オプション・リストを次のように開始できます。
リスト10-8 必須コンパイラ・オプション・リスト
P64 SIGN"EBCDIC" RWHARDPAGE INDD OUTDD HOSTARITHMETIC HOST-NUMMOVE"2"
HOST-NUMCOMPARE"2" ARITHMETIC"ENTCOBOL" CHECKDIV"ENTCOBOL"
FP-ROUNDING"ENTCOBOL" IBMCOMP ODOSLIDE PERFORM-TYPE"ENTCOBOL" RDW
RECMODE"ENTCOBOL" REMAINDER"2" ASSIGN"EXTERNAL" SYSPUNCH"80"
ZEROLENGTHFALSE COPYEXT"cpy,cbl"
 
注意:
インストール依存オプション
次のオプションは厳密には必要ではありませんが、大文字と小文字が混在するプログラムが含まれるアセットの処理に役立つことがあります。
FOLDCALLNAME"UPPER" (明示的に設定): CALL文のサブプログラム名を大文字にマップするようコンパイラに指示します。
FOLDCOPYNAME"UPPER" (明示的に設定): COPYディレクティブのコピー・ファイル名を大文字にマップするようコンパイラに指示します。
MAPNAME (明示的に設定): コンパイラが、ソース・プラットフォームと互換性を持つようにプログラム名とエントリポイント名を変更します。
これらの設定を試すことで、特定のアセットに適した組合せがわかります。たとえば、FOLDCALLNAME"UPPER"とMAPNAMEを一緒に設定すると、ソースコンパイラのオプションPGMNAME(COMPAT)の適切なエミュレーションを得られますが、このオプションの別の値をエミュレートする確実な方法はありません。
顧客の選択に基づくオプション
次のオプションはターゲット・アセットの動作に影響しますが、ARTシステムのユーザーの意思によって設定できます。
BOUNDおよびSSRANGEは、配列にアクセスするとき、または参照修飾子において、各索引が正しい境界の間にあることをチェックします。これは、IBMコンパイラのSSRANGEオプションに似ています。少なくとも移行テストと運用開始直後の数か月は、これら両方のオプションを設定することを強くお薦めします(SSRANGEを設定するとBOUNDも設定されることに注意してください)。この選択には少し問題があります。それは、ソース・プラットフォームで正しく実行しているように見えるいくつかのプログラム(SSRANGEオプションなし)が停止することがあるためです。ただし、経験によると、停止するプログラムはソース・プラットフォームで偶然作動できていた誤ったプログラムのみです。ターゲット・プラットフォームでは同様に作動しないか、まったく作動しません。このようなプログラムの検出と修正は早く行うのに越したことはありません。同じく、CHECKオプションの設定も検討してください。これは、様々な(他の)実行時チェックを有効にし、他の一見正常なプログラムを検出できます。
TRUNC: 値をBINARY変数(またはCOMP、あるいはCOMP-4)に割り当てたときに、指定されたPICサイズの切捨てが行われるかどうかを指定します。これは、IBMコンパイラのTRUNC(STD)オプションに似ています。ただし、ART COBOLコンバータの現在の仕様では、そのようなすべての変数はCOMP-5変数に変換され、この変数はTRUNCオプションの対象になりません。前述の「COMP-5型およびTRUNCコンパイラ・オプションの使用」での説明を参照してください。
APOSTおよびQUOTE: QUOTE記号定数が単一引用符と二重引用符のどちらの文字を表すかを選択できます。これは同名のIBMオプションと似ています。ソース・プラットフォームと同じ設定を使用します。
NOALTER: COBOLプログラムでのALTER文の存在を禁止します。ALTER文は以前使用されていましたが、存在している場合は深刻な問題になります。ART Workbenchでアセットを移行する機会に、残っているALTER句があれば削除してしまうことをお薦めします。その後、このオプションを設定して再び使用しないようにし、コンパイルされたコードの効率と安全性を高めます。
AREACHECK: Procedure Divisionで領域Aから開始するすべてのトークンを直前のトークンにかかわらずパラグラフまたはセクション・ラベルとしてコンパイラで扱います。AREACHECKを指定しないと、ピリオドの後のトークンのみがラベルとして扱われます。このディレクティブによりIBMのエラー処理(ラベルの前のピリオドが省略されていても、深刻度の低いメッセージが生成される)との互換性が高まります。そのようなエラーを招くソース・コードは修正することをお薦めします。
NOBYTEMODEMOVE: 重なっているデータ項目間での英数字データの移動動作を制御します。BYTE-MODE-MOVEが指定される場合、データはソースからターゲットに一度に1バイトずつ移動します。NOBYTE-MODE-MOVEが指定される場合、データは(環境に応じて)一度に2バイトや4バイト(またはそれ以上)のグラニュルでソースからターゲットに移動します。結果として、重なりがグラニュル・サイズよりも小さい場合は、グラニュルを移動するたびに次に移動するグラニュルの一部が上書きされます。NO-BYTE-MODE-MOVEではパフォーマンスが向上しますが、ソース・プラットフォームで正しく作動しているごく一部のプログラムに正しくないコードが生成されることがあります。比較的互換性が高い設定(BYTE-MODE-MOVE)から開始し、完全なリグレッション・テストを満足できるまで実行してから、他のオプションを選択して再テストすることをお薦めします。
DYNAM: CANCEL文が無視されないことを指定します。これは同名のIBMオプションに似ています(まったく同じではありません。Micro Focus COBOLのドキュメントを参照してください)。応用CICSプログラムを実行するART TP Runtimeシステム内のTuxedoサーバーは、CANCEL文を使用して、それらのプログラムのロードと実行に使用されたメモリーを解放するため、このオプションの設定を強くお薦めします。NODYNAMが有効になっていると、それらのサーバーが違うプログラムを実行するにつれ使用されるメモリー容量は増加し続けます。
NOFDCLEAR、NOHOSTFD: これらのオプションを有効に設定すると、IBMコンパイラによるFD使用方法の制限が再現されます(FDレコードはOPEN時にのみ割り当てられ、レコードの内容はWRITEの後に失われるなど)。このような制限には意味がないと考え、これらのオプションは使用しないことをお薦めします。
NATIVEFLOATINGPOINT: 「浮動小数点変数の使用」の説明を参照してください。
NOSEG: セグメント化をオフにし、すべてのセグメント番号を無視します。結果として生成されるプログラムは、オーバーレイなしの1つのプログラムになります。セグメント化は現在ほとんど使用されません。
STICKY-LINKAGE"2" / NOSTICKY-LINKAGE: このオプションは、現在の呼出しで新しいリンクが指定されない(実際の引数が指定されない)場合に、プログラムの前の呼出しで実際のデータ項目にリンクされたプログラム・パラメータ(Linkage Sectionの項目)が同じ項目に再リンクされるかどうかを制御します。STICKY-LINKAGE"2"設定は、特にCICSプログラムに関してソース・プラットフォームの動作との互換性は比較的高いのですが、標準ではなくエラーが発生しやすい傾向があります。また、これはART TPランタイム・システムの特定の機能(特に、共有メモリーのない1つのクラスタ内で実行するいくつかのサーバー上にTPトランザクションを分散する機能)との互換性がない場合があります。このため、最初からデフォルトのNOSTICKY-LINKAGE設定を使用し、リグレッション・テストで検出されるsticky-linkage関連の不具合を修正することを強くお薦めします。また、「NULLアドレスのLinkage-Section引数」を参照してください。
コンパイル時の操作に影響するオプション
次のオプションはコンパイル・リストの生成のみに影響します。自由に選択できます。
LIST: コンパイル・リストの場所と形式を指定します。
SETTINGS: コンパイル・リストにすべてのコンパイラ・オプションのリストを含めるかどうかを指定します。
TRACE: トレースに関する文(READY TRACEおよびRESET TRACE)に従うかどうかを指定します。
WARNING: コンパイル・リストに出力されるエラー・メッセージの冗長性を指定します。
FLAG"dialect": コンパイラが、指定されたCOBOLダイアレクトに含まれない構文を検出したときに、言語レベル証明フラグを生成する必要があるかどうかを指定します。
ソース・プログラムと、COBOLコンバータによって生成されたターゲット・プログラムの間で同じ動作を保証するには、これまでに説明した制限を考慮して、ターゲット・プログラムをコンパイルするときにコンパイラ・オプションの特定のセットを設定する必要があります。実際、Micro Focus COBOLコンパイラの一部のオプションにより実行コードの動作が変わります。そのため、Rehosting Workbench COBOLコンバータによって適用された変換を、次に示すオプション・セットに合うように調整します。異なる(少なくとも相反する)オプション・セットでコンパイルされたプログラムについてはサポートは提供されません。詳細は、Micro Focus COBOLのドキュメント、特にコンパイラ・ディレクティブ・ブックを参照してください。
動作に影響を及ぼす、設定が必須な主要オプションは、DIALECT"ENTCOBOL"です。実際、このダイアレクト・オプションは、PERFORM-TYPE"ENTCOBOL"などの多くのサブオプションを設定し、それにより、ターゲット・プログラムは、IBM Enterprise COBOL Compilerによってコンパイルされる元のソース・プログラムと可能なかぎり同じように動作します。
ただし、Refine COBOLコンバータは、ターゲット・プラットフォームのネイティブ文字セット、すなわちASCIIを使用することで、Enterprise COBOLの基本選択ではなくなります。このため、オプションCHARSET"ASCII"の設定が必須になります。反対に、DISPLAY数値のオーバーパンチ符号の表示にはIBM規約が使用されるため、オプションSIGN"EBCDIC"を設定する必要があります。
ターゲット・プログラムが正しく動作することを保証するには、主要オプション以外の次のオプションを設定する必要があります。
NOADV: テキスト・ファイルの特殊なプリンタ制御文字を使用しません。ターゲットプラットフォームの印刷ユーティリティにより、画面表示と同じレイアウトでファイルが印刷されます。
ALIGN"8": 01および77レベルのデータ項目が、最も一般的なメモリー境界で配列されます。
BOUND: 配列にアクセスするとき、各索引が正しい境界の間にあることをチェックします。この選択は、ソース・プラットフォームで正しく実行しているように見えるいくつかのプログラムを停止させる可能性があるため、少し問題があります。ただし、経験上、停止するプログラムは、ソース・プラットフォームで偶然作動していたものの、ターゲット・プラットフォームでは同様には動作しなかったであろう誤ったプログラムのみです。このようなプログラムの検出と修正は早く行うのに越したことはありません。
COMP-5"2": COMP-5変数のネイティブ・バイト・オーダーを使用します。これは、特にRehosting Workbench CICSランタイム・ルーチンとの互換性のために必要です。
NOCOPYLBR: コピー・ファイルは、プレーン・ファイルであり、.lbrライブラリ・ファイルではありません。
HOSTARITHMETIC: 算術計算でサイズ・エラーが発生した場合にIBM動作への準拠を試みます。
INTLEVEL"4": 最大38桁の数値変数を許可し、改善された算術動作をより広く使用します。
REPORT-LINE"256": Report Writerの最大行サイズを指定します。
RWHARDPAGE: Report Writerで新しいページにジャンプする場合に、複数の改行を使用するかわりにハードForm Feed (FF)文字を使用します。FFは、すべてのターゲット・プラットフォームの印刷ユーティリティで、新しいページへのジャンプと認識されます。
NOTRUNCCALLNAME: Oracle Tuxedo Application Rehosting Workbench COBOLコンバータではより長い名前が使用されるため、ENTCOBOLダイアレクトで通常行われるように、呼び出されたサブプログラムの名前を8文字に切り詰めません(これは、将来の拡張にも適しています)。
NOTRUNCCOPY: コピー・ファイルの名前について同じことを実行します。
COPYEXT: コピー・ファイルに使用されるファイル拡張子を指定します。移行時に選択した内容に従って設定します(target-copy-extension構成句を参照してください)。
SETTINGS: コンパイル・リストにすべてのコンパイラ・オプションのリストを含めるかどうかを指定します。
TRACE: トレースに関する文(READY TRACEおよびRESET TRACE)に従うかどうかを指定します。
WARNING: コンパイル・リストに出力されるエラー・メッセージの冗長性を指定します。
COBOL-IT
ソースCOBOLコンパイラの動作を再現するために、COBOL-ITは、IBMと互換性のある構成ファイル(ibm.conf)を提供します。この構成ファイルは、ターゲットCOBOLアセットのコンパイルに使用されます。
構成ファイルibm.confで設定されているコンパイラ・オプションに加えて、ソースとターゲットのCOBOL環境間の互換性を向上させるために、少なくとも次のオプションを追加する必要があります。
External-mapping
yesに設定した場合、EXTERNALと宣言されているファイルのすべてのファイル名が、環境変数を使用して実行時に解決されます。yesに設定する必要があります。
Binary-truncate
Binary-truncateは、バイナリ・データが切り捨てられた場合に、ランタイムの動作を管理するブール演算子です。noに設定する必要があります。これは、Micro Focus COBOLコンパイラ・ディレクティブNOTRUNCの動作に相当します。
Spzero
yesに設定した場合、NUMERIC USAGEフィールドに移動した空白文字が0に変換されます。noに設定する必要があります。
顧客のニーズに応じて、その他のコンパイラ・オプションを設定できます。COBOL-ITコンパイラ・オプションについては、COBOL-IT Compiler Suite Enterprise Editionのリファレンス・マニュアルを参照してください。
詳細処理
概要
COBOLコンバータが開始されると、様々な構成ファイルをメイン構成ファイルから順に読み取ってチェックします。この段階で矛盾が検出されると、1つ以上のエラー・メッセージが出力されてコンバータが終了します。それ以外の場合、コンバータはコマンド行オプションと構成ファイル・オプションの両方を使用して、処理する(ソース)プログラムのリストなどの内部パラメータを設定します。次に、これらの各プログラムを順に処理し始めます。それぞれについて、次の処理が行われます。
1.
2.
3.
4.
5.
6.
最後に、コマンド行にも構成ファイルにもdeferred-copy-reconcil句が指定されていない場合、コピー調整プロセスがプライベート・ディレクトリのターゲット・コピー・ファイルに適用されます。
deferred-copy-reconcil句がコマンド行または構成ファイルに指定されている場合、一度に複数の同時プロセスによってコンバータを実行できます。それ以外の場合、これらの同時プロセスのコピー調整フェーズによって、最終的に調整されたコピー・ファイルのデータベースに対するアクセス競合が発生して、異常終了することがあります。
コマンド行構文
調整ランチャ・インタフェース
COBOLコンバータはrefineコマンドを実行するように設計されていますが、これは、一般的なOracle Tuxedo Application Rehosting Workbenchランチャであり、すべての重要なOracle Tuxedo Application Rehosting Workbenchツールの起動にも使用されます。このランチャは、実行ログの管理や増分/繰返し操作など、これらのツールの様々な操作を処理します。
cobol-convertコマンド
形式
$REFINEDIR/refine cobol-convert [ launcher-options… ] \
( -s | -system-desc-file ) system-desc-path \
( -c | -config ) main-config-file-path \
[ other-specific-flags… ] \
( source-file-path | ( -f | -file | -file-list-file ) file-of-files )…
オプション
必須オプションを次に示します。
( -s | -system-desc-file ) system-desc-path
システム記述ファイルの場所を指定します。Unix/Linuxコマンドで一般的なように、パスとしては絶対パスまたは現在の作業ディレクトリに対する相対パスを指定できます。メイン構成ファイルのパスを含め、多数のTuxedo ART Workbenchツールで使用される他の多くのパスは、このファイルの場所から導出されることに注意してください(次のオプションを参照)。これにより、同じコマンドを様々な作業ディレクトリから実行しやすくなります。
( -c | -config ) main-config-file-path
メイン変換構成ファイルの場所を指定します。絶対パスまたは相対パスのどちらも可能です。後者の場合は、システム記述ファイルを含むディレクトリに関して相対的に指定します(Tuxedo ART Workbenchツールでの共通の方法)。
処理するソース・プログラムを定義する一般オプションを次に示します。
source-file-path
このパスで指定されたプログラム・ソース・ファイルを作業リストに追加します。パスは、現在の作業ディレクトリが異なる場合でも、システムのルート・ディレクトリ$SYSROOTに対する相対パスとして指定する必要があります。
( -f | -file | -file-list-file ) file-of-files
このパスで指定されたファイルにリストされているプログラム・ソース・ファイルを作業リストに追加します。file-of-files自体はどこに配置してもよく、そのパスは絶対パスまたは現在の作業ディレクトリに対する相対パスのいずれかです。ただし、このリストにリストされるプログラム・ソース・ファイルは、システムのルート・ディレクトリに対して相対的に指定されている必要があります。
個々のプログラムまたはfile-of-files (あるいはその両方)を必要な数だけ指定できます。作業リストは、コマンド行がCOBOLコンバータで分析される際に作成されます。前述の詳細な説明を参照してください。
オプションの固有フラグまたはオプションを次に示します。
-dcrpまたは-deferred-copy-reconcil
構成ファイルのdeferred-copy-reconcil句と同じ効果があり、各プログラムの変換後にコピー調整プロセスを増分的に実行しません。COBOLコンバータを複数の同時プロセスで実行できるのは、この句またはフラグを使用する場合のみです。
-tpe extensionまたは-target-program-extension extension
このオプションは、同名の構成ファイル句と同じ効果があります。指定をオーバーライドします。
-tce extensionまたは-target-copy-extension extension
このオプションは、同名の構成ファイル句と同じ効果があります。指定をオーバーライドします。
-keepまたは-keep-same-file-names
このオプションは、同名の構成ファイル句と同じ効果があります。指定をオーバーライドします。
-forceまたは-force-translation
このオプションは、同名の構成ファイル句と同じ効果があります。指定をオーバーライドします。
-cicsまたは-activate-cics-rules
このオプションは、同名の構成ファイル句と同じ効果があります。指定をオーバーライドします。
繰返しおよび増分操作
強力なコンピューティング・プラットフォームが容易に使用可能である今日であっても、Tuxedo ART Workbenchを使用した完全なアセットの処理は、依然として計算集中的で長時間の実行、メモリーを消費するタスクのままです。このため、Workbenchツールは、停止と再起動が容易に行えるように設計されており、makeに似たメカニズムのおかげで、すでに完了した作業を繰り返す必要はありません。これにより、移行プロジェクトのすべてのフェースで効率的な操作が可能です。
最初の処理: 繰返し操作
最初のフェーズでは、完全に新しいアセットから、安定したアセットの最初の変換、生成のサイクルの終わりまで、makeに似たメカニズムが使用されて、次のような繰返し操作が可能になっています。
1.
2.
3.
このモードは特に、カタロガのようにアセット全体にグローバルな処理を行うツールやコマンドに適していますが、COBOLコンバータのようにコンポーネント対応のツールでも役立ちます。これはTuxedo ART Workbenchツールの通常の操作モードであり、これを選択するために必要なことは特に何もありません。
アセットでの変更: 増分操作
COBOLコンバータは、様々なコンポーネント(メイン・プログラム・ファイル)と関連する結果ファイル(POBファイル、ターゲット・プログラム・ファイル)の間の依存関係を認識しています。この情報を使用して、アセットで変更が発生したときに増分的に対処できます。たとえば、COBOLソース・ファイルが追加、変更または削除されると、カタロガは影響を受けたプログラムを再解析し、COBOLコンバータはそれらのみを再変換します。これもTuxedo ART Workbenchツールの通常の操作モードであり、これを選択するために必要なことは特に何もありません。

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved