매크로 제어문
본 장에서는 매크로 제어문과 각 오퍼랜드에 대해 설명한다.
1. 개요
다음은 매크로 제어문에 대한 목록이다.
매크로 제어문 | 설명 |
---|---|
지정된 조건에 따라 DO 그룹(DO 문으로 시작하여 END 문까지)을 반복한다. |
|
DO 문의 끝을 알리는 문이다. |
|
IF 문에 지정된 파라미터의 값이 주어진 조건을 만족하면 매크로 전개의 흐름을 변경한다. |
|
지정한 멤버의 내용을 JCL 문장으로 포함시킨다. |
|
NOP 문 자체는 아무 동작도 수행하지 않는다. |
|
PEXIT 문까지만 수행을 하고 이후는 무시한다. |
|
내부 파라미터의 값을 변경한다. |
|
매크로 전개의 흐름을 SKIP 문에 기술된 명칭을 갖는 문장(작업 제어문이나 매크로 제어문)으로 이동한다. |
2. DO 문
지정된 조건에 따라 DO 그룹(DO 문으로 시작하여 END 문까지)을 반복한다.
-
사용법
/\[명칭]△¹DO△¹제어 파라미터 이름={초기값}△¹TO△¹{종료값}△¹[ BY △¹증분값]△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/\"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
DO
오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "DO"라고 기술한다.
명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다. DO 문의 끝은 반드시 END 문으로 기술을 한다.
제어 파라미터 이름
DO 그룹(DO 문으로 시작하여 END 문까지)을 반복하는 제어 파라미터이다.
초기값부터 시작해서 종료값까지 반복을 하다가 종료한다. 반복할 때마다 증분값이 더해지며, 증분값이 없는 경우에는 1씩 더해진다.
초기값
제어 파라미터의 초기값이다(0이상의 숫자로 기술한다).
TO
오퍼레이션 기술 위치로 초기값 뒤에 1개 이상의 공백을 두고 "TO"라고 기술한다.
종료값
제어 파라미터의 종료값이다(0이상의 숫자로 기술한다).
BY
오퍼레이션 기술 위치로 초기값 뒤에 1개 이상의 공백을 두고 "BY"라고 기술한다.
증분값
제어 파라미터의 증분값이다(0이상의 숫자로 기술한다).
주석
상수나 파라미터 이름이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.
-
예제
다음은 지정된 조건에(1부터 4까지) 따라 DO 그룹을 반복하는 경우 예제이다.
//********************************************************* //* MACRO DO (MACDO) //********************************************************* //PROC01 PROC /\DO01 DO N=1 TO 4 //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\END01 END
위와 같이 매크로가 정의된 프러시저(MACDO)를 호출하면 PS010 스텝이 4번 반복된다.
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACDO
3. END 문
END 문은 DO 문과 한쌍이 되어 사용하고, DO 그룹(DO 문으로 시작하여 END 문까지)의 끝을 나타낸다.
-
사용법
/\[명칭]△¹END△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
END
오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "END"라고 기술한다. 명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다.
주석
END 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.
-
예제
/\S1 END
4. IF 문
IF 문에 지정된 파라미터의 값을 비교하여서 조건을 만족하면 매크로 전개의 흐름을 변경한다.
-
사용법
/\[명칭]△¹IF△¹조건,분기처△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/\"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
IF
오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "IF"라고 기술한다. 명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다.
조건
IF 이후에 1개 이상의 공백을 두고 조건을 기술한다.
좌변 연산자 우변 ------------------------------------------------------------------------------- 파라미터 이름 {=|^=|=N|<|>|<=|>=} {값}
-
파라미터 이름: 비교 대상 값이 저장돼 있는 파라미터의 이름이다.
-
= : 좌변과 우변의 값이 동일하면 분기처로 이동한다.
-
^= 또는 =N : 좌변과 우변의 값이 상이하면 분기처로 이동한다.
-
값: 비교 대상 값이다. 인용 캐릭터 라인으로 지정한다.
분기처
조건과 콤마 이후에 분기처를 기술한다.
다음은 분기처에 대한 설명이다. 분기처 기술 위치에는 명칭이나 파라미터 이름을 기술할 수 있다.
-
명칭: 이동하려는 곳(매크로 제어문)의 명칭이다.
-
파라미터 이름: 이동하려는 곳의 명칭이 저장되어 있는 파라미터의 이름이다.
주석
분기처 이후에 1개 이상의 공백을 두고 기술한다.
주석은 71번째 칸까지 기술할 수 있다.
-
-
예제
다음은 조건의 우변에 값을 지정하고 분기처의 명칭을 직접 지정하는 경우 예제이다.
//********************************************************* //* MACRO IF (MACIF) //********************************************************* //PROC01 PROC /\IF01 IF PASS=YES,LABEL01 //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\LABEL01 NOP //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
위와 같이 매크로가 정의된 프러시저(MACIF)를 호출하여 전개된 결과는 다음과 같다.
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACIF,PASS=YES
[ 결과 ]
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
5. INCLUDE 문
지정한 프러시저의 내용을 JCL 문장으로 포함시킨다.
-
사용법
/\[명칭]△¹INCLUDE△¹프러시저 이름△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/\"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
INCLUDE
오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 'INCLUDE’이라고 기술한다. 명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다.
프러시저 이름
JCL 문장으로 포함시킬 프러시저의 이름을 기술한다.
INCLUDE 문에서 지정한 프러시저에는 PROC 문을 기술해서는 안 된다.
-
예제
다음은 지정한 프러시저의 내용을 JCL에 포함시키는 경우 예제이다.
//********************************************************* //* MACRO INCLUDE (MACINC) //********************************************************* //SYSOUT DD SYSOUT=*
위와 같이 매크로가 정의된 프러시저(MACINC)를 호출하여 전개된 결과는 다음과 같다.
//PROC01 PROC //PS010 EXEC PGM=pgmtest_environ /\INC01 INCLUDE MACINC //PS020 EXEC PGM=pgmtest_environ /\INC02 INCLUDE MACINC
[ 결과 ]
//PROC01 PROC //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
6. NOP 문
NOP 문 자체는 아무 동작도 수행하지 않는다. 하지만 NOP 문의 명칭은 SKIP 문, IF 문의 분기처로 사용될 수 있다.
-
사용법
/\[명칭]△¹NOP△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/\"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
NOP
오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "NOP"라고 기술한다. 명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다.
주석
NOP 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.
-
예제
/\S1 NOP
7. PEXIT 문
매크로 전개의 흐름을 PEXIT 문까지만 수행하고 PEXIT 문 이후부터는 무시한다.
-
사용법
/\[명칭]△¹PEXIT△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/\"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
PEXIT
오퍼레이션 기술 위치로, 명칭 뒤에 1개 이상의 공백을 두고 "PEXIT"이라고 기술한다. 명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다.
주석
분기처 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.
-
예제
다음은 PEXIT 문을 이용한 예제이다.
//********************************************************* //* MACRO PEXIT (MACPEXIT) //********************************************************* //PROC01 PROC //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\PEXIT01 PEXIT //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
위와 같이 매크로가 정의된 프러시저(MACPEXIT)를 호출하여 전개된 결과는 다음과 같다.
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACPEXIT
[ 결과 ]
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
8. SET 문
내부 파라미터의 값을 변경한다.
-
사용법
/\[명칭]△¹SET△¹파라미터 이름1={값|\파라미터 이름2}△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/\"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
SET
오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "SET"이라고 기술한다. 명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다.
파라미터 이름1
변경할 파라미터의 이름을 기술한다.
값
파라미터의 값을 지정된 값으로 변경한다. 인용 캐릭터 라인으로 지정한다.
파라미터 이름2
파라미터를 지정된 이름으로 변경한다.
주석
상수나 파라미터 이름2 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.
-
예제
다음은 내부 파라미터의 값을 변경하는 경우 예제이다.
//********************************************************* //* MACRO SET (MACSET) //********************************************************* //PROC01 PROC /\SET01 SET PROGRAM=pgmtest_environ //PS010 EXEC PGM=&PROGRAM //SYSOUT DD SYSOUT=*
위와 같이 매크로가 정의된 프러시저(MACSET)를 호출하면 PGM의 &PROGRAM이 pgmtest_environ으로 치환된다.
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACSET
9. SKIP 문
매크로 전개의 흐름을 SKIP 문에 기술된 명칭을 갖는 문장(매크로 제어문)으로 이동한다. 즉, SKIP 문 이후부터 지정된 문장 이전까지의 매크로 정의 본체를 무시한다.
-
사용법
/\[명칭]△¹SKIP△¹분기처△¹[주석]
항목 설명 명칭
명칭 기술 위치로 "/\"에 이어서 세 번째 칸부터 기술한다.
8자 이내의 기호명칭이며, 생략할 수 있다.
SKIP
오퍼레이션 기술 위치로, 명칭 뒤에 1개 이상의 공백을 두고 "SKIP"이라고 기술한다. 명칭을 생략한 경우 "/\" 뒤에 1개 이상의 공백을 두고 기술한다.
분기처
SKIP 이후에 1개 이상의 공백을 두고 분기처를 기술한다.
다음은 앞에서 언급한 분기처에 대한 설명이다. 분기처 기술 위치에는 명칭을 기술할 수 있다.
-
명칭: 이동하려는 곳(매크로 제어문)의 명칭이다.
주석
분기처 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.
-
-
예제
다음은 분기처 항목 중 명칭 설정 예제이다.
//********************************************************* //* MACRO SKIP (MACSKIP) //********************************************************* //PROC01 PROC /\SKIP01 SKIP LABEL01 //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\LABEL01 NOP //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
위와 같이 매크로가 정의된 프러시저(MACSKIP)를 호출하여 전개된 결과는 다음과 같다.
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACSKIP,PASS=YES
[ 결과 ]
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*