OS/VS COBOL

本付録では、OS/VS COBOLの変換について説明します。

1. OS/VS COBOLの要素

OS/VS COBOLは、システム内部でCOBOL構文に変換されて処理されます。OS/VS COBOLは、--enable-osvsオプションを使用した場合にのみ処理されます。

以下では、OS/VSの変換とOS/VSで使用される要素について説明します。

  • AFTER POSITIONING節

    以下は、OS/VS COBOLの例です。

    AFTER POSITIONING 0
    AFTER POSITIONING 1
    AFTER POSITIONING 2
    AFTER POSITIONING 3

    以下は、上記のOS/VS COBOLの変換後の結果ソースです。

    AFTER ADVANCING PAGE
    AFTER ADVANCING 1 LINES
    AFTER ADVANCING 2 LINES
    AFTER ADVANCING 3 LINES
  • EXAMINEステートメント

    以下は、OS/VS COBOLの例です。

    EXAMINE DATA-A TALLYING UNTIL FIRST " "

    以下は、上記のOS/VS COBOLの変換後の結果ソースです。

    MOVE 0 TO TALLY
    INSPECT DATA-A TALLYING TALLY FOR CHARACTERS BEFORE " "
  • EXHIBITステートメント

    EXHIBITステートメントは、次の3つの形式で使用できます。

    • 形式1

      以下は、OS/VS COBOLの例です。

      WORKING-STORAGE SECTION.
      01 A PIC X(8).
      01 B PIC X(8).
      ...
      EXHIBIT NAMED A B.

      以下は、上記のOS/VS COBOLの変換後の結果ソースです。

      WORKING-STORAGE SECTION.
      01 A PIC X(8).
      01 B PIC X(8).
      ...
        DISPLAY "A = " A
                "B = " B
    • 形式2

      以下は、OS/VS COBOLの例です。

      WORKING-STORAGE SECTION.
      01 A PIC X(8).
      01 B PIC X(8).
      ...
      EXHIBIT CHANGED A B.

      以下は、上記のOS/VS COBOLの変換後の結果ソースです。

      WORKING-STORAGE SECTION.
      01 A PIC X(8).
      01 B PIC X(8).
      01 A-CMP PIC X(8).
      01 B-CMP PIC X(8).
      ...
      IF A NOT EQUAL TO A-CMP
        DISPLAY A
      END-IF
      IF B NOT EQUAL TO B-CMP
        DISPLAY B
      END-IF
      MOVE A TO A-CMP
      MOVE A TO B-CMP
    • 形式3

      以下は、OS/VS COBOLの例です。

      WORKING-STORAGE SECTION.
      01 A PIC X(8).
      01 B PIC X(8).
      ...
      EXHIBIT CHANGED NAMED A B.

      以下は、上記のOS/VS COBOLの変換後の結果ソースです。

      WORKING-STORAGE SECTION.
      01 A PIC X(8).
      01 B PIC X(8).
      01 A-CMP PIC X(8).
      01 B-CMP PIC X(8).
      ...
      IF A NOT EQUAL TO A-CMP
        DISPLAY "A = " A
      END-IF
      IF B NOT EQUAL TO B-CMP
        DISPLAY "B = " B
      END-IF
      MOVE A TO A-CMP
      MOVE A TO B-CMP
  • TRANSFORMステートメント

    以下は、OS/VS COBOLの例です。

    WORKING-STORAGE SECTION.
    01 A PIC X(8) VALUE "ABCDEFGH"
    ...
    TRANSFORM A FORM "ABC" TO "ZZZ"

    以下は、上記のOS/VS COBOLの変換後の結果ソースです。

    WORKING-STORAGE SECTION.
    01 A PIC X(8) VALUE "ABCDEFGH"
    ...
    INSPECT A CONVERTING "ABC" TO "ZZZ"
  • ONステートメント

    ONステートメントは、次の2つの形式で使用できます。

    • 形式1

      以下は、OS/VS COBOLの例です。

      ON integer
         imperative steatement

      以下は、上記のOS/VS COBOLの変換後の結果ソースです。

      WORKING-STORAGE SECTION.
      01 A PIC 9(8) COMP VALUE 0.
      ...
      ADD 1 TO A
      IF A = integer
         imperative statement
    • 形式2

      以下は、OS/VS COBOLの例です。

      ON integer-1 UNTIL integer-2
         imperative steatement

      以下は、上記のOS/VS COBOLの変換後の結果ソースです。

      WORKING-STORAGE SECTION.
      01 A PIC 9(8) COMP VALUE 0.
      ...
      ADD 1 TO A
      IF A > integer-1 AND B < integer-2
         imperative statement
  • CURRENT-DATE特殊レジスターの出力形式

    --CURRENT-DATE "MMDDYYYY"オプションを使用して、CURRENT-DATE特殊レジスターの出力形式をMMDDYYYYに変更します。

    IDENTIFICATION DIVISION.
    PROGRAM-ID.    TESTCOB.
    DATA           DIVISION.
    WORKING-STORAGE SECTION.
        01 DATE-FORMAT PIC X(8).
    PROCEDURE      DIVISION.
        MOVE CURRENT-DATE TO DATE-FORMAT.
        DISPLAY DATE-FORMAT.

    以下は、上記のOS/VS COBOLのコンパイル・オプションの使用方法とその実行結果です。

    ofcob -x TESTCOB.cob --enable-osvs --current-date
    03/22/21
    ofcob -x TESTCOB.cob --enable-osvs --current-date MMDDYYYY
    03/22/21
    ofcob -x TESTCOB.cob --enable-osvs --current-date DDMMYYYY
    22/03/21