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


サポートされない言語エレメント

Enterprise COBOL は、以下の OS/VS COBOL 言語エレメントをサポートしません。Enterprise COBOL へのアップグレード時には、以下の説明で示されているように、これらの項目を 除去または変更しなければなりません。
ASSIGN . . . OR
OS/VS COBOL は ASSIGN ... OR 文節を受け入れました。この文節を Enterprise COBOL のもとで使用するには、OR を除去してください。
ASSIGN TO integer system-name
OS/VS COBOL は ASSIGN TO integer system-name 文節を受け入れました。この文節を Enterprise COBOL のもとで使用するには、integer (整数) を除去してください。
ASSIGN . . . FOR MULTIPLE REEL/UNIT
OS/VS COBOL は、ASSIGN ... FOR MULTIPLE REEL/UNIT 句を受け入れて、それを文書として 扱いました。Enterprise COBOL はこの句をサポートしません。
CLOSE ステートメント : WITH POSITIONING 句および DISP 句
OS/VS COBOL は、OS/VS COBOL で IBM 拡張として提供された CLOSE ステートメント の WITH POSITIONING 句および DISP 句を受け入れました。Enterprise COBOL では、これらの句は受け入れられません。
CURRENT-DATE 特殊レジスター
OS/VS COBOL は CURRENT-DATE 特殊レジスターを受け入れました。このレジスターは、MOVE ステートメントの送信フィールドとしてのみ有効です。CURRENT-DATE は 8 バイトの英数字形式です。
MM/DD/YY  (month, day, year)
Enterprise COBOL は DATE 特殊レジスターをサポートします。 このレジスターは、ACCEPT ステートメントの送信フィールドとしてのみ有効です。DATE は 6 バイトの英数字形式です。
YYMMDD  (year, month, day)
したがって、次のようなステートメントを含んでいる OS/VS COBOL プログラムは変更しなければなり ません。
77  DATE-IN-PROGRAM  PICTURE X(8).
    . . .
    MOVE CURRENT-DATE TO DATE-IN-PROGRAM.
これを変更する (2 桁の年の形式を保持して) 1 つの方法の例は、次のとおりです。
01  DATE-IN-PROGRAM.
    02 MONTH-OF-YEAR     PIC X(02).
    02 FILLER            PIC X(01)  VALUE "/".
    02 DAY-OF-MONTH      PIC X(02).
    02 FILLER            PIC X(01)  VALUE "/".
    02 YEAR              PIC X(02).

01  ACCEPT-DATE.
    02 YEAR              PIC X(02).
    02 MONTH-OF-YEAR     PIC X(02).
    02 DAY-OF-MONTH      PIC X(02).
    . . .
    ACCEPT ACCEPT-DATE FROM DATE.
    MOVE  CORRESPONDING ACCEPT-DATE TO DATE-IN-PROGRAM.
これを変更し、4 桁の年を指定する方法の例は、次のとおりです。
01  DATE-IN-PROGRAM.
    02 MONTH-OF-YEAR     PIC X(02).
    02 FILLER            PIC X(01)  VALUE "/".
    02 DAY-OF-MONTH      PIC X(02).
    02 FILLER            PIC X(01)  VALUE "/".
    02 YEAR              PIC X(04).

01  CURRENT-DATE.
    02 YEAR              PIC X(04).
    02 MONTH-OF-YEAR     PIC X(02).
    02 DAY-OF-MONTH      PIC X(02).
    . . .
    MOVE FUNCTION CURRENT-DATE(1:8) TO CURRENT-DATE.
    MOVE CORRESPONDING CURRENT-DATE TO DATE-IN-PROGRAM.
EXAMINE ステートメント
OS/VS COBOL は EXAMINE ステートメントを受け入れていましたが、Enterprise COBOL では受け入れません。
したがって、OS/VS COBOL プログラムに以下のようなコーディングが含まれている場合、
EXAMINE DATA-LENGTH TALLYING UNTIL FIRST " "
Enterprise COBOL ではこれを以下のように置き換えてください。
MOVE 0 TO TALLY
INSPECT DATA-LENGTH TALLYING TALLY FOR CHARACTERS BEFORE " "

整数値の WORKING-STORAGE 基本データ項目を指定できる個所であれば、 引き続き TALLY 特殊レジスターを使用することができます。

EXHIBIT ステートメント
OS/VS COBOL は EXHIBIT ステートメントを受け入れていましたが、Enterprise COBOL では受け入れません。

Enterprise COBOL では、 DISPLAY ステートメントを使用して、 EXHIBIT ステートメントを置き換えることができます。ただし、DISPLAY ステートメントは EXHIBIT ステートメントのすべての機能を実行するわけではありません。

EXHIBIT NAMED に対する修正処置
EXHIBIT NAMED ステートメントは、直接 DISPLAY ステートメントで置き換えること ができます。
    OS/VS COBOL                          Enterprise COBOL 

WORKING-STORAGE SECTION.        WORKING-STORAGE SECTION.
77  DAT-1 PIC X(8).             77  DAT-1 PIC X(8).
77  DAT-2 PIC X(8).             77  DAT-2 PIC X(8).
        . . .                          . . .
    EXHIBIT NAMED DAT-1 DAT-2       DISPLAY "DAT-1 = " DAT-1
                                        "DAT-2 = " DAT-2
EXHIBIT CHANGED に対する修正処置
EXHIBIT CHANGED ステートメントは、以下のように、IF およ び DISPLAY ステートメントで置き換えることができます。
  1. データ項目の新しい値が以前の値と異なるかどうかを調べるために、IF ステートメントを指定し ます。
  2. IF ステートメントの statement-1 として DISPLAY ステートメントを指定します。
この変更により、新しい値が以前の値と異なるときにだけ、指定されたデータ項目の値が表 示されます。
    OS/VS COBOL                          Enterprise COBOL 

WORKING-STORAGE SECTION.        WORKING-STORAGE SECTION.
77  DAT-1 PIC X(8).             77  DAT-1 PIC X(8).
77  DAT-2 PIC X(8).             77  DAT-2 PIC X(8).
                                77  DAT1-CMP PIC X(8).
                                77  DAT2-CMP PIC X(8).
        . . .                           . . .
 EXHIBIT CHANGED DAT-1 DAT-2    IF DAT-1 NOT EQUAL TO DAT1-CMP
                                  DISPLAY DAT-1
                                END-IF
                                IF DAT-2 NOT EQUAL TO DAT2-CMP
                                  DISPLAY DAT-2
                                END-IF
                                MOVE DAT-1 TO DAT1-CMP
                                MOVE DAT-2 TO DAT2-CMP
EXHIBIT CHANGED NAMED に対する修正措置
EXHIBIT CHANGED NAMED ステートメントは、以下のように、IF およ び DISPLAY ステートメントで置き換えることができます。
  1. データ項目の新しい値が以前の値と異なるかどうかを調べるために、IF ステートメントを指定し ます。
  2. IF ステートメントの statement-1 として DISPLAY ステートメントを指定します。
この変更により、新しい値が以前の値と異なるときにだけ、指定されたデータ項目の値が表 示されます。
    OS/VS COBOL                          Enterprise COBOL 

WORKING-STORAGE SECTION.        WORKING-STORAGE SECTION.
77  DAT-1 PIC X(8).             77  DAT-1    PIC X(8).
77  DAT-2 PIC X(8).             77  DAT-2    PIC X(8).
                                77  DAT1-CMP PIC X(8).
                                77  DAT2-CMP PIC X(8).
        . . .                           . . .
  EXHIBIT CHANGED NAMED          IF DAT-1 NOT EQUAL TO DAT1-CMP
      DAT-1 DAT-2                    DISPLAY "DAT-1 = " DAT-1
                                 END-IF
                                 IF DAT-2 NOT EQUAL TO DAT2-CMP
                                     DISPLAY "DAT-2 = " DAT-2
                                 END-IF
                                 MOVE DAT-1 TO DAT1-CMP
                                 MOVE DAT-2 TO DAT2-CMP
FILE-CONTROL 段落の FILE-LIMIT 文節
OS/VS COBOL は、FILE-LIMIT 文節を受け入れて、それをコメントとして扱いまし た。Enterprise COBOL はこの文節を受け入れません。したがって、FILE-LIMIT 文節のすべてのオカレンスを除去しなければなりません。
USE AFTER STANDARD ERROR 宣言の GIVING 句
OS/VS COBOL では、USE AFTER STANDARD ERROR 宣言の GIVING 句を指定することができ ました。Enterprise COBOL はこの句をサポートしません。したがって、USE AFTER STANDARD ERROR 宣言の GIVING 句のすべてのオカレンスを除去しな ければなりません。

GIVING 句を置き換えるには、FILE-CONTROL FILE STATUS 文節を使用してください。FILE STATUS 文節は、エラー発生後だけでなく、各入出力要求の後で情報を提供します。

TOTALING/TOTALED AREA 句を持つ LABEL RECORDS 文節
OS/VS COBOL では、LABEL RECORDS 文節の TOTALING および TOTALED 句を使用できまし た。

Enterprise COBOL はこれらの句をサポートしません。したがって、LABEL RECORDS 文節から TOTALING/TOTALED 句のすべてのオカレンスを除去し なければなりません。さらに、これらの句に関連した変数も調べてください。

Enterprise COBOL で同等の機能を得るためには、次のようにしてください。
  • FD の LABEL RECORDS 文節から TOTALING または TOTALED への参照を除去します。同等のフィールドを WORKING-STORAGE 内に定義します。

    同等のフィールドで、ファイルへのそれぞれの WRITE の前に、キーまたはレコード・データを保管する (TOTALED AREA の場合) か、またはレコード・カウン トを更新して保管します (TOTALING AREA の場合) (これは、特定のボリュームに実際に書き 込まれた最後のレコードを反映します)。このカウンターを FD のレコード域に保存しないで ください。

  • "RESERVE 1 AREA" を SELECT 文節に組み込みます。
  • FD またはオーバーライドする JCL でブロック当たり 1 レコードだけを考慮に入れます。
  • 以下を組み込みます。

    DECLARATIVES.
             USE AFTER STANDARD ENDING FILE (または REEL)
              LABEL PROCEDURE ON filename.

    その後、OUTPUT ファイル用のラベルをフォーマット設定するか、または INPUT ファイル・ ラベルからのデータを保管します (AFTER STANDARD BEGINNING)。
  • NOAWO コンパイラー・オプションを指定します。
  • DD DCB オプション OPTCD=T を指定しないでください。これはサポートされないため、結果は予測できません。
NOTE ステートメント
OS/VS COBOL は NOTE ステートメントを受け入れました。Enterprise COBOL は NOTE ステートメントを受け入れません。したがって、Enterprise COBOL の場合、すべての NOTE ステートメントを削除し、NOTE 段落全体に代えて コメント行を使用してください。
ON ステートメント
OS/VS COBOL は ON ステートメントを受け入れました。Enterprise COBOL は ON ステートメントを受け入れません。

ON ステートメントは、それに含まれるステートメントの選択実行を可能にします。Enterprise COBOL では、EVALUATE ステートメントと IF ステートメントによって同様の機能が提供されます。

QSAM ファイルについて失敗する OPEN ステートメント (ファイル状況 39)
OS/VS COBOL では、 QSAM ファイルの固定ファイル属性を、COBOL プログラムまた は JCL と一致させなくても、OPEN ステートメントを正常に実行することができました。 Enterprise COBOL では、以下のものが一致していないと、プログラム内の OPEN ステートメントが正常に実行さ れないことがあります。
  • ファイルについての DD ステートメントまたはデータ・セット・ラベルで指定された固 定ファイル属性
  • COBOL プログラムの SELECT ステートメントおよび FD ステートメントでそのファイルについて指定された属性
ファイル編成、レコード・フォーマット (固定または可変)、コード・セット、または レコード長の属性が一致していないと、ファイル状況コード 39 が発生し、OPEN ステートメントが失敗 します。

よくあるファイル状況 39 の問題を防止するには、QSAM ファイルでのファイル状況 39 の防止を参照してください。

VSAM ファイルについて失敗する OPEN ステートメント (ファイル状況 39)
OS/VS COBOL では、 IDCAMS に関連した VSAM ファイル内で定義された RECORDSIZE が COBOL プログラムと一致しなくても、OPEN ステートメントを正常に実行することができました。Enterprise COBOL では、それらは一致しなければなりません。以下の規則が VSAM ESDS、KSDS、および RRDS ファイル定義に適用されます。
表 1. VSAM ファイル定義に関する規則

ファイル・タイプ

規則

ESDS および
KSDS VSAM

RECORDSIZE(avg,m) が指定されます。ここで、avg は COBOL レコードの平均サイズであ り、m よりも確実に小さい値です。m は COBOL レコードの最大サイズ以上です。
RRDS VSAM RECORDSIZE(n,n) が指定されます。ここで、n は COBOL レコードの最大サイズ以上です。
LEAVE、REREAD、および DISP 句を指定した OPEN ステートメント
OS/VS COBOL では、LEAVE、REREAD、および DISP 句を指定した OPEN ステートメントを使用でき ました。Enterprise COBOL では、これらの句を使用できません。

REREAD 機能を置き換えるには、WORKING-STORAGE SECTION で入力レコードのコピーを定 義し、各レコードを、それが読み取られた後で WORKING-STORAGE に移動してください。

READY TRACE および RESET TRACE ステートメント
OS/VS COBOL では、READY TRACE および RESET TRACE ステートメントを使用できました。Enterprise COBOL はこれらのステートメントをサポートしません。

READY TRACE ステートメントと類似した機能を得るには、Debug Tool を使用するか、また は Enterprise COBOL コンパイラーで使用可能な COBOL 言語を使用することができます。

Debug Tool を使用する場合は、TEST(ALL,SYM) オプションを指定してプログラム をコンパイルし、以下の Debug Tool コマンドを使用してください。
"AT GLOBAL LABEL PERFORM;
 LIST LINES %LINE; GO; END-PERFORM;"

COBOL 言語を使用する場合は、Enterprise COBOL の USE FOR DEBUGGING ON ALL PROCEDURES 宣言 で、READY TRACE および RESET TRACE と同様の機能を実行することができます。

以下に例を示します。
ENVIRONMENT DIVISION.
  CONFIGURATION SECTION.
  SOURCE-COMPUTER. IBM-370 WITH DEBUGGING MODE.
  . . .
DATA DIVISION.
  . . .
  WORKING-STORAGE SECTION.
  01 TRACE-SWITCH        PIC 9 VALUE 0.
     88  READY-TRACE           VALUE 1.
     88  RESET-TRACE           VALUE 0.
  . . .
PROCEDURE DIVISION.
  DECLARATIVES.
  COBOL-II-DEBUG SECTION.
    USE FOR DEBUGGING ON ALL PROCEDURES.
  COBOL-II-DEBUG-PARA.
    IF READY-TRACE THEN
        DISPLAY DEBUG-NAME
    END-IF.
  END DECLARATIVES.
  MAIN-PROCESSING SECTION.
  . . .
  PARAGRAPH-3.
  . . .
    SET READY-TRACE TO TRUE.
  PARAGRAPH-4.
  . . .
  PARAGRAPH-6.
  . . .
    SET RESET-TRACE TO TRUE.
  PARAGRAPH-7.
ここで、DEBUG-NAME は DEBUG-ITEM 特殊レジスターのフィールドであり、デバッグ・プロシージャーの実行を引き起こすプロシージャー名を表示します。(この例では、オブジェクト・プログラムは、制御がプロシージャー PARAGRAPH-4 ~ PARAGRAPH-6 の範囲内の各プロシージャーに達すると、そのプロシージャーの名前を表示 します。)

実行時には、EXEC ステートメントに PARM=/DEBUG を指定して、このデバッグ・プロシージャーを 活動化しなければなりません。この方法を使用すれば、デバッグ宣言を活動化または非活動化するためにプログラムを 再コンパイルする必要はありません。

REMARKS 段落
OS/VS COBOL は REMARKS 段落を受け入れました。

Enterprise COBOL は REMARKS 段落を受け入れません。この代わりとして、桁 7 の * から始まるコメント行を使用してください。

START . . . USING KEY ステートメント
OS/VS COBOL では、USING KEY 句を指定した START ステートメントを許可していましたが、Enterprise COBOL では許可していません。Enterprise COBOL では、KEY IS 句を使用した START ステートメントを指定することができます。
ステートメント結合子としての THEN
OS/VS COBOL は、ステートメント結合子としての THEN の使用を受け入れました。
次の例は、OS/VS COBOL での使用法を示しています。
MOVE A TO B THEN ADD C TO D
Enterprise COBOL は、ステートメント結合子としての THEN の使用をサポートしません。したがって、Enterprise COBOL では、これを次のように変更してください。
MOVE A TO B
ADD C TO D
TIME-OF-DAY 特殊レジスター
OS/VS COBOL は TIME-OF-DAY 特殊レジスターをサポートしました。このレジスターは、MOVE ステートメントの送信フィールドとしてのみ有効でした。TIME-OF-DAY は 6 バイトの外部 10 進フォーマットです。
HHMMSS (hour, minute, second)

Enterprise COBOL は TIME-OF-DAY 特殊レジスターをサポートしません。

したがって、次のようなステートメントを含んでいる OS/VS COBOL プログラムは変更しなければなり ません。
77  TIME-IN-PROGRAM   PICTURE  X(6).
. . .
    MOVE TIME-OF-DAY TO TIME-IN-PROGRAM.
これを変更する 1 つの方法の例は、次のとおりです。
MOVE FUNCTION CURRENT-DATE (9:6) TO TIME-IN-PROGRAM
注: CICS のもとでは、TIME-OF-DAY も TIME も有効ではありません。
TRANSFORM ステートメント
OS/VS COBOL は TRANSFORM ステートメントをサポートしました。Enterprise COBOL は、TRANSFORM ステートメントをサポートしませんが、INSPECT ステートメントをサポートします。したがって、OS/VS COBOL プログラム内の TRANSFORM ステートメントは、INSPECT CONVERTING ステートメントで置き 換えなければなりません。
たとえば、次の OS/VS COBOL TRANSFORM ステートメント
77  DATA-T     PICTURE X(9) VALUE "ABCXYZCCC"
  . . .
    TRANSFORM DATA-T FROM "ABC" TO "CAT"
を実行した場合、TRANSFORM は各文字を評価し、各 A を C に、各 B を A に、各 C を T に変更します。

TRANSFORM ステートメントの実行後、DATA-T には "CATXYZTTT" が入っています。

たとえば、次の INSPECT CONVERTING ステートメント (Enterprise COBOL でのみ有効)
77  DATA-T     PICTURE X(9) VALUE "ABCXYZCCC"
  . . .
    INSPECT DATA-T
        CONVERTING "ABC" TO "CAT"
を実行した場合、INSPECT CONVERTING は TRANSFORM と同様に各文字を評価し、各 A を C に、各 B を A に、各 C を T に変更します。

INSPECT CONVERTING ステートメントの実行後、DATA-T には "CATXYZTTT: が入っています。

USE BEFORE STANDARD LABEL
OS/VS COBOL では USE BEFORE STANDARD LABEL ステートメントを受け入れていましたが、Enterprise COBOL では受け入れません。

したがって、USE BEFORE STANDARD LABEL ステートメントのすべてのオカレンスを除去しなければなりません。Enterprise COBOL は標準外ラベルをサポートしないので、ユーザーは Enterprise COBOL で 標準外ラベル付きファイルを処理することはできません。


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

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