Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 コンパイラーおよびランタイム 移行ガイド


文書化されていないサポートされない OS/VS COBOL 拡張

このセクションは、主に、MIGR オプションによってフラグ設定されていない COBOL ステートメントから 構成されています。これらのステートメントは、OS/VS COBOL コンパイラーによって受け入れられましたが、Enterprise COBOL によって受け入れらないステートメントもあります。

これらの言語エレメントは、OS/VS COBOL への文書化されていない拡張であるため 、有効な OS/VS COBOL コードであると見なされません。このリストには、すべての文書化されていない拡張が含まれているとは限りません が、IBM で認識している限りのものをすべて組み込んであります。
簡略複合比較条件および括弧の使用
OS/VS COBOL は、簡略複合比較条件内での括弧の使用を受け入れました。
Enterprise COBOL は、ほとんどの括弧の使用を IBM 拡張としてサポートします。ただし、2 つの違いがあります。
  • 簡略複合比較条件の有効範囲内では、Enterprise COBOL は括弧の内側の関係演算子をサポート しません。以下に例を示します。
    A = B  AND ( < C OR D)
  • 比較条件内での括弧の誤った使用の一部は、OS/VS COBOL では受け入れられました が、Enterprise COBOL では受け入れられません。以下に例を示します。
    (A = 0 AND B) = 0
ACCEPT ステートメント
OS/VS COBOL は、ID と簡略名または関数名との間にキーワード FROM がない ACCEPT ステートメント を受け入れました。

Enterprise COBOL はそのような ACCEPT ステートメントを受け入れません。

BLANK WHEN ZERO 文節およびアスタリスク (*) のオーバーライド
OS/VS COBOL では、同じ記入項目について BLANK WHEN ZERO 文節と、ゼロ抑制記号としての アスタリスク (*) を指定した場合、ゼロ抑制が BLANK WHEN ZERO をオーバーライドしまし た。

Enterprise COBOL は、これら 2 つの言語エレメントが同じデータ記述記入項目に ついて指定された場合、これらを受け入れません。したがって、Enterprise COBOL では、1 つのデータ記述記入項目の中にこの文節と 記号の両方が含まれていてはなりません。

OS/VS COBOL プログラムの中で BLANK WHEN ZERO 文節と、ゼロ抑制記号としてのアスタリス クの両方を指定している場合に、Enterprise COBOL で同じ動作を得るため には、BLANK WHEN ZERO 文節を除去してください。

CLOSE . . . FOR REMOVAL ステートメント
OS/VS COBOL では、順次ファイル用の FOR REMOVAL 文節を使用できました。この文節はプログラムの実行に影響を与えました。Enterprise COBOL はこのステートメントを構文検査しますが、このステートメントはプログラムの実行に影響を与えません。
グループと数値パック 10 進項目の比較
OS/VS COBOL では、グループと数値パック 10 進項目の比較を使用できましたが、誤りの結果を出すコードが生成されました。
たとえば、以下の比較の結果は、
"1 IS NOT > 0"
というメッセージが出され、数値的に正しくありません。
"1 > 0"

    05  COMP-TABLE.
        10 COMP-PAY               PIC 9(4).
        10  COMP-HRS              PIC 9(3).
    05  COMP-ITEM                 PIC S9(7) COMP-3.

PROCEDURE DIVISION.
    MOVE 0 TO COMP-PAY COMP-HRS.
    MOVE 1 TO COMP-ITEM.
    IF COMP-ITEM > COMP-TABLE
       DISPLAY '1 > 0'
    ELSE
       DISPLAY '1 IS NOT > 0'.

Enterprise COBOL ではこのような比較を許可しません。

CICS での実行時の動的 CALL ステートメント
CICS での実行時には OS/VS COBOL プログラムからの動的 CALL ステートメントはサポートされていないのに、OS/VS COBOL は、動的 CALL を出すプログラムの診断を行いませんでした。

言語環境プログラムのもとで CICS での実行時に OS/VS COBOL プログラムが動的 CALL ステートメントを発行すると、プ ログラムは異常終了コード U3504 で異常終了します。

Enterprise COBOL プログラムは動的 CALL ステートメントを使用して、CICS のもとで、他の Enterprise COBOL プログラムや、PL/I および C/C++ プログラムを呼び出すことができます。

制御のフロー (終了ステートメントなしの場合)
OS/VS COBOL では、アセンブラー・プログラムを OS/VS COBOL プログラムの終わりにリンク・エ ディットし、制御のフローを COBOL プログラムの終わりからアセンブラー・プログラムに移すことが可能です。

Enterprise COBOL では、プログラムの終わりに終了ステートメント (STOP RUN または GOBACK) をコーディ ングしていない場合、プログラムは暗黙の GOBACK によって終了します。制御のフローは COBOL プログラムの終わりを越えて進むことはできません。

「終わりを越えて」別のプログラムに進むプログラムがある場合は、コードを、別のプログラムへの CALL インターフェースに変更してください。

索引名
OS/VS COBOL では、修飾された索引名を使用できました。

Enterprise COBOL では、修飾された索引名を使用できません。索引名は参照される場合、固有でな ければなりません。

LABEL RECORD IS ステートメント
OS/VS COBOL は、ワード RECORD のない LABEL RECORD 文節を受け入れました。たとえば、LABEL RECORD IS OMITTED の代わりに LABEL IS OMITTED を使用できました。

Enterprise COBOL はそのような LABEL RECORD 文節を受け入れません。

MOVE ステートメント - バイナリー値および DISPLAY 値
Enterprise COBOL の TRUNC(OPT) コンパイラー・オプションは、OS/VS COBOL の NOTRUNC コンパ イラー・オプションとの互換性のために推奨されますが、フルワード・バイナリー 項目 (USAGE COMP PIC 9(5) ~ PIC 9(9)) の移動に関して異なる結果をもたらす可能性があ ります。
以下に例を示します。
WORKING-STORAGE SECTION.
  01 WK1 USAGE COMP-4 PIC S9(9).

PROCEDURE DIVISION.

  MOVE 1234567890 to WK1
  DISPLAY WK1.
  GOBACK.

この例では、10 桁の値が 9 桁の項目に移動されているので無効な COBOL コーディングです。

たとえば、以下のコンパイラー・オプションを指定してコンパイルされた場合、結果は以 下のようになります。

  OS/VS COBOL の NOTRUNC Enterprise COBOL の TRUNC(OPT)
バイナリー値 x'499602D2' x'0DFB38D2'
DISPLAY 値 234567890 234567890

OS/VS COBOL の場合、バイナリー・データ項目に含まれているバイナリー値は DISPLAY 値と同じ ではありません。DISPLAY 値は PICTURE 文節内の桁の数に基づいており、バイナリー値はバイナリー・データ項目 のサイズ (このケースでは 4 バイト) に基づいています。バイナリー・データ項目の 10 進数での実際の値は 1234567890 です。

Enterprise COBOL の場合、バイナリー値と DISPLAY 値は同じです。これは、発生した切り捨て が PICTURE 文節内の桁の数に基づいていたためです。

この状態は、OS/VS COBOL では MIGR によって、Enterprise COBOL で は TRUNC(OPT) を用いてのコンパイル時に、フラグが設定されます。

MOVE CORRESPONDING ステートメント
  • OS/VS COBOL では、MOVE CORRESPONDING で複数の受信側を許可していましたが、Enterprise COBOL では許可していません。したがって、次の OS/VS COBOL ステートメント
    MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-B GROUP-ITEM-C
    は、以下の 2 つの Enterprise COBOL MOVE CORRESPONDING ステートメントに変更する必要があります。
    MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-B
    MOVE CORRESPONDING GROUP-ITEM-A TO GROUP-ITEM-C
  • OS/VS COBOL のリリース 2.4 より前のリリースは、MOVE CORRESPONDING ステートメントの受信側内の固有でない従属データ項目を受け入れましたが、Enterprise COBOL では受け入れません。以下に例を示します。
    01  KANCFUNC.
        03  CL  PIC XX.
        03  KX9 PIC XX.
        03  CC  PIC XX.
    01  HEAD1-AREA.
        03  CL  PIC XX.
        03  KX9 PIC XX.
        03  CC  PIC XX.
        03  KX9 PIC XX.
    .
    .
    .
        MOVE CORR KANCFUNC to HEAD1-AREA.

    Enterprise COBOL の場合、受信側内のデータ項目が固有の名前を持つように変更してください。

MOVE ステートメント - 複数の TO 指定
OS/VS COBOL では、MOVE ステートメントのそれぞれの受信側の前で予約語 TO を使用できまし た。以下に例を示します。
MOVE aa TO bb TO cc
Enterprise COBOL では、上記のステートメントは次のように変更しなければなりません。
MOVE aa TO bb cc
MOVE ALL - TO PIC 99
OS/VS COBOL では、固定数値受信フィールドへのグループ移動を使用できました。以下に例を示します。
MOVE ALL ' ' TO num1
ここで、num1 は PIC 99 です。

Enterprise COBOL では上記のケースを許可しません。

MOVE ステートメント - 数値切り捨ての警告メッセージ
OS/VS COBOL は、桁が失われることになるような数値受信側を持つ MOVE ステートメントの 場合は警告メッセージを出しました。以下に例を示します。
77 A PIC 999.
77 B PIC 99.
.
.
.
    MOVE A TO B.

VS COBOL II、COBOL (MVS および VM 版)、および COBOL (OS/390 および VM 版) バ ージョン 2 リリース 1 は、このケースで警告メッセージを出しません。

COBOL (OS/390 および VM 版) バージョン 2 リリース 2 および Enterprise COBOL は、新しいコンパイラー・オプ ション DIAGTRUNC が有効であれば、警告メッセージを出します。

OCCURS 文節
OS/VS COBOL では、OCCURS 文節に続く句について標準以外の順序が許可されましたが、Enterprise COBOL では許可されません。
たとえば、OS/VS COBOL では以下のコード・シーケンスは許可されました。
01  D   PIC 999.
01  A.
    02  B OCCURS 1 TO 200 TIMES
          ASCENDING KEY C
          DEPENDING ON D
          INDEXED BY H.
    02  C PIC 99.
Enterprise COBOL では、上記の例は次のように変更しなければなりません。
01  D   PIC 999.
01  A.
    02  B OCCURS 1 TO 200 TIMES
          DEPENDING ON D
          ASCENDING KEY C
          INDEXED BY H.
    02  C PIC 99.
OPEN REVERSED ステートメント
OS/VS COBOL は、複数リール・ファイル用の REVERSED 句を受け入れていましたが、Enterprise COBOL では受け入れません。
PERFORM ステートメント - 第 2 の UNTIL
OS/VS COBOL では、次の例に示されているように、PERFORM ステートメントで 2 番目の UNTIL を使用で きました。
PERFORM CHECK-FOR-MATCH THRU CHECK-FOR-MATCH-EXIT
    UNTIL PARM-COUNT = 7
    OR UNTIL SSREJADV-EOF.

Enterprise COBOL では、2 番目の UNTIL ステートメントを許可しません。以下の例に示すように、除去する必要があります。

PERFORM CHECK-FOR-MATCH THRU CHECK-FOR-MATCH-EXIT
    UNTIL PARM-COUNT = 7
    OR SSREJADV-EOF.
区域 A におけるピリオド
OS/VS COBOL では、区域 A で、無効な区域 A 項目 (または項目なし) の後にピリオドを コーディングすることができました。Enterprise COBOL では、区域 A におけるピリオドは有効な区域 A 項目の後になければなりません。
任意の部における連続したピリオド
OS/VS COBOL では、任意の部で 2 つの連続したピリオドをコーディングすることができま した。

Enterprise COBOL では、1 つの行で 2 つのピリオドが検出されると、警告メッセージ (RC = 4) が 出される (PROCEDURE DIVISION の場合) か、または重大メッセージ (RC = 12) が出され ます (ENVIRONMENT DIVISION または DATA DIVISION の場合)。

以下の例の場合、OS/VS COBOL では受け入れられますが、Enterprise COBOL では 重大 (RC = 12) エラーおよび警告 (RC = 4) が出されます。
WORKING-STORAGE SECTION.
01 A PIC 9.
.
.
.
    MOVE 1 TO A.
.
.
    GOBACK.
SD、FD、または RD の終わりで欠落しているピリオド
ソート記述、ファイル記述、または報告書記述の終わり (01 レベル標識の前) にピリ オドが必要です。

OS/VS COBOL は、欠落しているピリオドを診断し、警告メッセージ (RC = 4) を出しました。

Enterprise COBOL は、エラー・メッセージ (RC = 8) を出します。

段落名で欠落しているピリオド
OS/VS COBOL のリリース 2.4 より前のリリースは、後にピリオドのない段落名を 受け入れました。OS/VS COBOL リリース 2.4 は警告メッセージ (RC = 4) を出しました。Enterprise COBOL はエラー・メッセージ (RC = 8) を出します。
PICTURE ストリング
OS/VS COBOL は、暗黙の小数点の左側がすべて Z であり、暗黙の小数点のすぐ右側 が Z であるが、9 または 9- で終わる PICTURE ストリングを受け入れました。以下に例を示します。
05 WEIRD-NUMERIC-EDITED PIC Z(11)VZ9.

Enterprise COBOL は上記の例のようなステートメントを受け入れません。Z9ZZ または 99 に変更しなければなりません。

固有でない PROGRAM-ID 名
OS/VS COBOL では、データ名または段落名が PROGRAM-ID 名と同じであることが許可され ました。Enterprise COBOL では、PROGRAM-ID 名は固有であることが必要です。
修飾 ― 同じ句の反復使用
A of B of B

OS/VS COBOL では句の繰り返しを許可していましたが、Enterprise COBOL では許可していません。

READ ステートメント ― KEY 句内の再定義されたレコード・キー
OS/VS COBOL は、READ ステートメントの KEY 句内の暗黙的または明示的に再定義されたレコード・キ ーを受け入れました。

Enterprise COBOL は、読み取られるファイル用の SELECT 文節でレコード・キーとして 指定されたデータ項目の名前だけを受け入れます。

RECORD CONTAINS n CHARACTERS 文節
COBOL 74 標準との相違点として、OS/VS COBOL プログラムの RECORD CONTAINS n CHARACTERS 文節は、FD 内で OCCURS DEPENDING ON 文節が指定されるとオーバーライドされ、固定長レコードではなく可変長レコードを含むファイルが生成されていました。

Enterprise COBOL では、RECORD CONTAINS n CHARACTERS 文節は固定長レコードを含むファイルを生成します。

RECORD KEY 句および ALTERNATE RECORD KEY 句
OS/VS COBOL では、ALTERNATE RECORD KEY data-name-4 の左端の文字位置 が RECORD KEY または他の任意の ALTERNATE RECORD KEY 句の左端の文字位置と同じである ことが許可されました。

Enterprise COBOL では、これは許可されません。

SD または FD 記入項目内の REDEFINES 文節
OS/VS COBOL リリース 2.4 以前のリリースでは、レベル 01 の SD または FD 内に記述した REDEFINES 文節を受け入れていました。Enterprise COBOL および OS/VS COBOL リリース 2.4 では受け入れません。
たとえば、以下の一連のコードは無効になります。
SD ...
01  SORT-REC-HEADER.
    05  SORT-KEY          PIC X(20).
    05  SORT-HEADER-INFO  PIC X(40).
    05  FILLER            PIC X(20).
01  SORT-REC-DETAIL REDEFINES SORT-REC-HEADER.
    05  FILLER            PIC X(20).
    05  SORT-DETAIL-INFO  PIC X(60).

Enterprise COBOL で類似した機能を得るためには、REDEFINES 文節を削除してください。

テーブルを指定した REDEFINES 文節
OS/VS COBOL では、REDEFINES 文節内でテーブルを指定することができました。たとえば、以下の例の場合、OS/VS COBOL は警告メッセージ (RC = 4) を出します。
01 E.
    03 F OCCURS 10.
        05  G PIC X.
    03 I REDEFINES F PIC X.

Enterprise COBOL は、テーブルの再定義を許可しないため、上記の例の場合は 重大 (RC = 12) メッセージを出します。

比較条件
OS/VS COBOL リリース 2.4 以前のリリースでは、比較条件内の無効な演算子を受け入れていました。次の表に、OS/VS COBOL リリース 2.3 では受け入れられ、Enterprise COBOL では受け入れられない演 算子をリストします。この表は、Enterprise COBOL プログラムの場合の有効なコーディングも示しています。
OS/VS COBOL R2.3 Enterprise COBOL
= TO = または EQUAL TO
> THAN > または GREATER THAN
< THAN < または LESS THAN
RENAMES 文節 - 固有でない非修飾データ名
OS/VS COBOL プログラム内の RENAMES 文節で、固有でない非修飾データ名が参照されていて も、MIGR メッセージは出されません。しかし、Enterprise COBOL は、固有でない非修飾データ名の使用をサポートしません。
対応する FD のない SELECT ステートメント
OS/VS COBOL は、対応する FD 記入項目のない SELECT ステートメントを受け入れていましたが、Enterprise COBOL では受け入れません。
SORT 動詞
以前の保守レベルでは、OS/VS COBOL コンパイラーは SORT 動詞内の UNTIL および TIMES 句 を受け入れました。以下に例を示します。
SORT FILE-1
 ON ASCENDING KEY AKEY-1
  INPUT PROCEDURE IPROC-1
   OUTPUT PROCEDURE OPROC-1
    UNTIL AKEY-1 = 99.


SORT FILE-2
 ON ASCENDING KEY AKEY-2
  INPUT PROCEDURE IPROC-2
   OUTPUT PROCEDURE OPROC-2
    10 TIMES.

Enterprise COBOL は上記の例のようなステートメントを受け入れません。

SORT ステートメントの正しい構文では、ASCENDING KEY または DESCENDING KEY の後で、ソート・キーであるデータ名を使用することができます。ワード KEY はオプショナルです。

OS/VS COBOL は、ASCENDING KEY の後で使用された場合の IS を受け入れました。Enterprise COBOL はこのコンテキストでの IS を受け入れません。以下に例を示します。

SORT SORT-FILE
     ASCENDING KEY IS SD-NAME-FIELD
     USING INPUT-FILE
     GIVING SORTED-FILE.
SORT または MERGE
OS/VS COBOL では、SORT または MERGE 出力 PROCEDURE 内の最初の RETURN の前に 実行された SD バッファーへの MOVE は、最初のレコードのデータをオーバーレイしませ ん。

Enterprise COBOL では、同様の MOVE が最初のレコードのデータをオーバーレイします。SORT または MERGE 操作時に、SD データ項目が使用されます。OUTPUT PROCEDURE 内で、最初の RETURN ステートメントの実行前に、その SD データ項目を 使用してはなりません。最初の RETURN ステートメントの実行前にデータがこのレコード域に移動されると、最初に戻されるレコードが上書きされます。

STRING ステートメント - 送り出しフィールド ID
OS/VS COBOL では、整数ではない数値送信フィールド ID を使用できました。Enterprise COBOL のもとでは、数値送信フィールド ID は整数でなければなりません。
UNSTRING ステートメント - 「OR」、「IS」、または数字編集項目を用いるコーディング
OS/VS COBOL では、UNSTRING ステートメントに以下のいずれかの無効なコーディングが含まれていても、診断エラー・メッセージは出されませんでした。
  1. 次のように、literal-1 と literal-2 の間に必須のワード "OR" が欠落している場合。
    UNSTRING A-FIELD DELIMITED BY '-'  ','
        INTO RECV-FIELD-1
        POINTER PTR-FIELD.
  2. 次のように、ポインターの指定の中に無関係なワード "IS" がある場合。
    UNSTRING A-FIELD DELIMITED BY '-' OR ','
        INTO RECV-FIELD-2
        POINTER IS PTR-FIELD.
  3. 次のように、UNSTRING ステートメントのソースとして数字編集項目を使用している場合。
    01 NUM-ED-ITEM    PIC $$9.99+
    .
    .
    .
        UNSTRING NUM-ED-ITEM DELIMITED BY '$'
             INTO RECV-FIELD-1
             POINTER PTR-FIELD

    Enterprise COBOL では、UNSTRING ステートメント内の送信側として非数値データ項目のみが許可されます。

Enterprise COBOL は、これらのエラーのいずれかを含んでいる UNSTRING ステートメントが検出されると、メッセージを出します。

UNSTRING ステートメント - 複数の INTO 句
OS/VS COBOL は、複数の INTO 句が指定されていると、警告 (RC = 4) メッセージを出しま した。以下に例を示します。
UNSTRING ID-SEND DELIMITED BY ALL "*"
   INTO ID-R1 DELIMITER IN ID-D1 COUNT IN ID-C1
   INTO ID-R2 DELIMITER IN ID-D2 COUNT IN ID-C2
   INTO ID-R2 DELIMITER IN ID-D3 COUNT IN ID-C3

Enterprise COBOL では、UNSTRING ステートメントで複数の INTO 句を使用することはできません。

VALUE 文節 - PICTURE 文節に関連した符号付き値
OS/VS COBOL では、PICTURE 文節が無符号である場合に、VALUE 文節のリテラルに符号 を付けることができました。

Enterprise COBOL では、VALUE 文節のリテラルは PICTURE 文節と一致しな ければならず、符号を除去しなければなりません。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)