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