OS/VS COBOL

본 장에서는 OS/VS COBOL의 변환에 대해서 설명한다.

1. OS/VS COBOL element

OS/VS COBOL의 경우 내부적으로 COBOL의 문법으로 변환되어 처리된다. OS/VS COBOL은 --enable-osvs 옵션을 사용하였을 때만 처리된다.

다음은 OS/VS에서 쓰이는 elements와 변환에 대한 설명이다.

  • AFTER POSITIONING Clause

    다음은 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 Statement

    다음은 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 Statement

    EXHIBIT Statement의 경우 3가지 포맷이 존재한다.

    • format 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
    • format 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
    • format 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 Statement

    다음은 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 Statement

    ON Statement의 경우 2가지 포맷이 존재한다.

    • format 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
    • format 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 special register 출력 포맷

    --CURRENT-DATE "MMDDYYYY" 옵션을 통해 CURRENT-DATE special regiseter 출력 포맷을 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