Expanded COBOL
본 장에서는 Expanded COBOL의 변환에 대해서 설명한다.
1. Expanded COBOL element
Expanded COBOL의 경우 내부적으로 COBOL의 문법으로 변환되어 처리된다. Expanded COBOL은 --expanded 옵션을 사용하였을 때만 처리된다.
다음은 Expanded COBOL에서 쓰이는 elements에 대한 설명 및 변환된 내용이다.
-
EVALUATE Statement
다음은 Expanded COBOL의 Evaluate 예제이다.
EVALUATE WK WHEN 28 WHEN OTHER DISPLAY 'WNE OTHER' END-EVALUATE.
다음은 위의 Expanded COBOL이 변환된 후 결과 소스이다.
EVALUATE WK WHEN 28 DISPLAY 'WHEN OTHER' WHEN OTHER DISPLAY 'WHEN OTHER' END-EVALUATE.
-
VALUE CLAUSE truncate
VALUE CLAUSE에 PICTURE SIZE를 초과하는 값이 오는 경우 truncate한다.
다음은 Expanded COBOL의 VALUE CLAUSE truncate 예제이다.
01 WK PIC X(10) VALUE '1234567890*'.
다음은 위의 Expanded COBOL이 변환된 후 결과 소스이다.
01 WK PIC X(10) VALUE '1234567890'.
-
INSPECT Statement TRAILING phrase
INSPECT Statement에서 TRAILING phrase 를 사용해 우측에서 부터 지정한 character의 반복 사용된 수를 count 할 수 있도록 한다.
다음은 Expanded COBOL의 VALUE INSPECT Statement에서 TRAILING phrase 예제이다.
WORKING-STORAGE SECTION. 01 TARGET-FIELD PIC X(10) VALUE '123 '. 01 WS-TALLY-LEN PIC 9999. PROCEDURE DIVISION. INSPECT TARGET-FIELD TALLYING WS-TALLY-LEN FOR TRAILING SPACE. DISPLAY WS-TALLY-LEN.
다음은 위의 결과이다.
3
-
SEARCH Statement
SEARCH Statement 사용 시 AT END 뒤에 바로 WHEN 절이 올 수 있도록 한다.
SEARCH WS-ARH-TBL AT END WHEN WK = ZEROES DISPLAY 'WK :' WK END-SEARCH.
-
COMMIT Statement
OpenFrame에서 실행시켰을 때 text_commit 함수를 호출하는 COMMIT Statement를 사용할 수 있도록 한다.
COMMIT.
-
DIVIDE ZERO Exception
Divide 연산 수행 시 제수(Divisor)가 0인 경우 runtime assertion이 아닌 몫(quotient)에 0값을 설정한다.
WORKING-STORAGE SECTION. 01 RESULT1 PIC 9999. 01 RESULT2 PIC 9999. 01 DIVISOR PIC 9999 VALUE 0. PROCEDURE DIVISION. DIVIDE DIVISOR INTO RESULT1. DISPLAY "RESULT1 : " RESULT1. COMPUTE RESULT2 = 10 / 0. DISPLAY "RESULT2 : " RESULT2.
다음은 위의 결과이다.
RESULT1 : 0 RESULT2 : 0
-
Zoned Decimal Sign zone portion
String 값을 Zoned Decimal에 MOVE하는 경우 Zoned Decimal의 4-bit unsigned 값으로 치환하지 않고 String 값 그대로 MOVE 한다.
다음은 Expanded COBOL 의 Zoned Decimal Sign zone portion 에 대한 예제이다.
WORKING-STORAGE SECTION. 01 ZONED PIC S9(4). 01 STR PIC X(4) VALUE 'AAAA'. PROCEDURE DIVISION. MOVE STR TO ZONED. CALL 'ofcob_hexdump' USING ZONED VALUE LENGTH OF ZONED.
다음은 위의 결과이다.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HEXA VALUE : 41414141 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
LINKAGE SECTION variable life cycle
LINKAGE SECTION에 작성된 변수가 LOCAL 변수로 사용되도록 한다.
다음은 Expanded COBOL 의 LINKAGE SECTION variable life cycle 에 대한 예제이다.
IDENTIFICATION DIVISION. PROGRAM-ID. TESTCOB. DATA DIVISION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. CALL 'SUBCOB'.
IDENTIFICATION DIVISION. PROGRAM-ID. SUBCOB. DATA DIVISION. WORKING-STORAGE SECTION. 01 F PIC 9(1) COMP. 01 WK-VAR PIC X(8). LINKAGE SECTION. 01 LK-VAR PIC X(8). PROCEDURE DIVISION. DISPLAY "ADDRESS OF LK-VAR : " ADDRESS OF LK-VAR. ADD 1 TO F. IF F = 1 THEN SET ADDRESS OF LK-VAR TO ADDRESS OF WK-VAR CALL 'SUBCOB'.
다음은 위의 결과이다.
ADDRESS OF LK-VAR : 0000000000 ADDRESS OF LK-VAR : 0000000000
-
Expansion of target types for reference modification
지정된 USAGE와 관계 없이 Reference Modifier를 사용할 수 있도록 한다.
다음은 Expanded COBOL 의 Expansion of target types for reference modification 에 대한 예제이다.
IDENTIFICATION DIVISION. PROGRAM-ID. TESTCOB. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 Z PIC 9(8). 01 S PIC X(8) VALUE 'ZZZZZZZZ'. 01 C PIC 9(15) COMP-3. 01 B PIC 9(16) COMP. PROCEDURE DIVISION. MOVE S(1:4) TO Z(1:4). CALL 'ofcob_hexdump' USING Z VALUE LENGTH OF Z. MOVE S(1:4) TO C(1:4). CALL 'ofcob_hexdump' USING C VALUE LENGTH OF C. MOVE S(1:4) TO B(1:4). CALL 'ofcob_hexdump' USING B VALUE LENGTH OF B.
다음은 위의 결과이다.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HEXA VALUE : 5a5a5a5a00000000 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HEXA VALUE : 5a5a5a5a00000000 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HEXA VALUE : 5a5a5a5a00000000 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>