매크로 제어문

본 절에서는 매크로 제어문, 오퍼랜드에 대해 설명한다.

1. 개요

다음은 매크로 제어문에 대한 목록이다.

매크로 제어문 설명

DEFEND 문

작업 제어 매크로 정의를 끝낸다.

DEFINE 문

작업 제어 매크로 정의를 시작한다.

DEXIT 문

매크로 정의 본체에서 이후의 문장들은 무시한 채 작업 제어 매크로 정의를 끝마친다.

IF 문

IF 문에 지정된 파라미터의 값이 주어진 조건을 만족하면 매크로 전개의 흐름을 변경한다.

IFN 문

IFN 문에 지정된 파라미터의 값이 주어진 조건을 만족하면 매크로 전개의 흐름을 변경한다.

MSG 문

OpenFrame에서는 문법 오류만 검사하고 사용하지 않는다.

NOP 문

NOP 문 자체는 아무 동작도 수행하지 않는다.

SET 문

내부 또는 외부 파라미터의 값을 변경한다.

SKIP 문

매크로 전개의 흐름을 SKIP 문에 기술된 명칭을 갖는 문장(작업 제어문이나 매크로 제어문)으로 이동한다.

WTOR 문

OpenFrame에서는 문법 오류만 검사하고 사용하지 않는다.

WTO 문

OpenFrame에서는 문법 오류만 검사하고 사용하지 않는다.

매크로 정의 본체

작업 제어 매크로의 작업 내용을 기술한다.

2. DEFEND 문

작업 제어 매크로 정의를 끝낸다. 작업 제어 매크로 정의는 DEFINE 문에서 시작하여 DEFEND 문에서 끝난다.

  • 사용법

    /[명칭]△¹DEFEND△¹[주석]
    항목 설명

    명칭

    명칭 기술 위치로 "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    DEFEND

    오퍼레이션 기술 위치로, 명칭 뒤에 1개 이상의 공백을 두고 "DEXFEND"라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    주석

    DEFEND 이후에 1개 이상의 공백을 두고 기술한다.

    주석은 71번째 칸까지 기술할 수 있다.

  • 예제

    /      DEFINE M1,P1=NO
    \      JOB    J1
    /      IF     P1=YES,S1
    /      SKIP   S2
    \S1    EX     X
    /      DEXIT
    \S2    EX     Y
    /      DEFEND

    위와 같이 매크로가 정의된 경우 매크로를 호출의 결과는 다음과 같다.

    \      M1     P1=NO

    [ 결과 ]

    \      JOB    J1
    \S2    EX     Y

3. DEFINE 문

작업 제어 매크로 정의를 시작한다.

  • 사용법

    /[매크로 전개 규칙]△¹DEFINE△¹위치 오퍼랜드[,키워드 오퍼랜드]...△¹[주석]
    항목 설명

    매크로 전개 규칙

    매크로 전개 규칙 기술 위치로, "/"에 이어서 두 번째 칸부터 기술한다.

    다음 중에 하나를 설정한다.

    • NOEXPAN

    • EXPAN

    • SEXPAN

    OpenFrame에서는 여기에 지정된 값에 상관없이 EXPAN 규칙(2 ~ 71번째 칸을 매크로 전개)을 따른다.

    DEFINE

    오퍼레이션 기술 위치로 매크로 전개 규칙 뒤에 1개 이상의 공백을 두고 "DEFINE"이라고 기술한다. 매크로 전개 규칙을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    위치 오퍼랜드[,키워드 오퍼랜드]

    DEFINE 이후에 1개 이상의 공백을 두고 오퍼랜드를 기술하며 모든 위치 오퍼랜드를 먼저 기술하고 이후에 키워드 오퍼랜드를 기술한다. 오퍼랜드에 대한 자세한 내용은 오퍼랜드나 각 절의 설명을 참고한다.

    주석

    오퍼랜드 이후에 1개 이상의 공백을 두고 기술한다.

    주석은 71번째 칸까지 기술할 수 있다.

오퍼랜드

다음은 앞에서 언급한 오퍼랜드에 대한 설명이다. 각 오퍼랜드에 대한 자세한 내용은 해당 절의 내용을 참고한다.

  • 위치 오퍼랜드

    오퍼랜드 설명

    매크로 이름

    작업 제어 매크로를 참조할 때 사용되는 이름을 기술한다.

  • 키워드 오퍼랜드

    오퍼랜드 설명

    파라미터 이름

    매크로 내에서 사용되는 파라미터를 기술한다.

3.1. 매크로 이름

작업 제어 매크로를 참조할 때 사용되는 이름을 기술한 기호명칭이다.

OpenFrame에서는 매크로를 호출할 때 여기에 기술된 이름을 참조하지 않는다. 자세한 내용은 매크로 호출문을 참고한다.

3.2. 파라미터 이름

매크로 내에서 사용되는 파라미터를 기술한다. 기호명칭이다.

여러 개의 파라미터를 기술하는 경우에는 각각의 파라미터를 콤마(,)로 구분한다. 파라미터 이름 옆에 디폴트 값을 명시할 수도 있는데, 이 경우 매크로 호출문에서 해당 파라미터를 지정하지 않으면 기본값을 갖는다. (기본값: 인용 캐릭터 라인)

또한, 파라미터만 지정하고 값을 지정하지 않으면(예: 파라미터=) 파라미터 값을 빈 값으로 초기화한다.

  • 예제

    다음은 TEST라는 이름의 작업 제어 매크로를 정의하는 예제이다.

    / DEFINE TEST,JN,PP=4

    위 예제에서 파라미터는 JN과 PP 두 개이고, JN 파라미터는 기본값이 없고, PP 파라미터의 기본값은 4이다.

4. DEXIT 문

매크로 정의 본체에서 이후의 문장들은 무시한 채 작업 제어 매크로 정의를 끝마친다. 매크로 정의 본체에서 DEXIT 문이나 DEFEND 문이 나타나면, 시스템 입력 제어 프로그램은 매크로 정의 본체 읽기를 끝낸다.

  • 사용법

    /[명칭]△¹DEXIT△¹[주석]
    항목 설명

    명칭

    명칭 기술 위치로, "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    DEXIT

    오퍼레이션 기술 위치로, 명칭 뒤에 1개 이상의 공백을 두고 "DEXIT"라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    주석

    DEXIT 이후에 1개 이상의 공백을 두고 기술한다.

    주석은 71번째 칸까지 기술할 수 있다.

  • 예제

    /      DEFINE M1,P1=NO
    \      JOB    J1
    /      IF     P1=YES,S1
    /      SKIP   S2
    \S1    EX     X
    /      DEXIT
    \S2    EX     Y
    /      DEFEND

    위와 같이 매크로가 정의된 경우 매크로 호출에 대한 전개 결과는 다음과 같다.

    \      M1     P1=YES

    [ 결과 ]

    \      JOB    J1
    \S1    EX     X

5. IFN 문

IFN 문에 지정된 파라미터의 값을 비교하여서 조건을 만족하면 매크로 전개의 흐름을 변경한다. IF 문은 문자열 간 비교를 수행하는 반면, IFN 문은 정수 간 비교를 수행한다.

  • 사용법

    /[명칭]△¹IFN△¹조건,분기처△¹[주석]
    항목 설명

    명칭

    명칭 기술 위치로 "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    IFN

    오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "IFN"이라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    조건

    IFN 이후에 1개 이상의 공백을 두고 조건을 기술한다. 조건에 대한 자세한 내용은 표 이후에 설명한다.

    분기처

    조건과 콤마 이후에 분기처를 기술한다. 분기처에 대한 자세한 내용은 표 이후에 설명한다.

    주석

    분기처 이후에 1개 이상의 공백을 두고 기술한다.

    주석은 71번째 칸까지 기술할 수 있다.

    • 조건

      조건의 형식은 다음과 같다.

      좌변 연산자 우변

      파라미터 이름

      {= | ^= | =N | < | > | <= | >=}

      {값 | \파라미터 이름}

      다음은 조건 형식의 각 항목에 대한 설명이다.

      항목 설명

      파라미터 이름

      비교 대상 값이 저장되어 있는 파라미터의 이름이다.

      =

      좌변과 우변의 값이 동일하면 분기처로 이동한다.

      ^= 또는 =N

      좌변과 우변의 값이 상이하면 분기처로 이동한다.

      <

      좌변의 값이 우변의 값보다 작으면 분기처로 이동한다.

      >

      좌변의 값이 우변의 값보다 크면 분기처로 이동한다.

      <=

      좌변의 값이 우변의 값보다 작거나 같으면 분기처로 이동한다.

      >=

      좌변의 값이 우변의 값보다 크거나 같으면 분기처로 이동한다.

      비교 대상 값이다. 정수 또는 괄호로 둘러싸인 정수이다.

    • 분기처

      다음은 앞에서 언급한 분기처에 대한 설명이다. 분기처 기술 위치에는 명칭이나 파라미터 이름을 기술할 수 있다.

      항목 설명

      명칭

      이동하려는 곳(작업 제어문이나 매크로 제어문)의 명칭이다.

      파라미터 이름

      이동하려는 곳의 명칭이 저장되어 있는 파라미터의 이름이다.

  • 예제

    /      DEFINE TEST,JN,PP=
    \      JOB    \JN
    /      IFN    PP>(7),BB
    \      EX
    \      FD     FD1=DA
    \      FD     FD2=DA
    /BB    NOP
    \      EX     SAMPLE
    /      DEFEND

    위와 같이 매크로가 정의된 경우 매크로 호출에 대한 전개 결과는 다음과 같다.

    \      TEST   ABC,PP=10

    [ 결과 ]

    \      JOB    ABC
    \      EX     SAMPLE

6. IF 문

IF 문에 지정된 파라미터의 값을 비교하여서 조건을 만족하면 매크로 전개의 흐름을 변경한다. IF 문은 문자열 간 비교를 수행하는 반면, IFN 문은 정수 간 비교를 수행한다.

  • 사용법

    /[명칭]△¹IF△¹조건,분기처△¹[주석]
    항목 설명

    명칭

    명칭 기술 위치로 "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    IF

    오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "IF"라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    조건

    IF 이후에 1개 이상의 공백을 두고 조건을 기술한다. 조건에 대한 자세한 내용은 표 이후에 설명한다.

    분기처

    조건과 콤마 이후에 분기처를 기술한다. 분기처에 대한 자세한 내용은 표 이후에 설명한다.

    주석

    분기처 이후에 1개 이상의 공백을 두고 기술한다.

    주석은 71번째 칸까지 기술할 수 있다.

    • 조건

      조건의 형식은 다음과 같다.

      좌변 연산자 우변

      파라미터 이름

      {= | ^= | =N}

      {값 | \파라미터 이름}

      다음은 조건 형식의 각 항목에 대한 설명이다.

      항목 설명

      파라미터 이름

      비교 대상 값이 저장돼 있는 파라미터의 이름이다.

      =

      좌변과 우변의 값이 동일하면 분기처로 이동한다.

      ^= 또는 =N

      좌변과 우변의 값이 상이하면 분기처로 이동한다.

      비교 대상 값이다. 인용 캐릭터 라인으로 지정한다.

    • 분기처

      다음은 앞에서 언급한 분기처에 대한 설명이다. 분기처 기술 위치에는 명칭이나 파라미터 이름을 기술할 수 있다.

      항목 설명

      명칭

      이동하려는 곳(작업 제어문이나 매크로 제어문)의 명칭이다.

      파라미터 이름

      이동하려는 곳의 명칭이 저장되어 있는 파라미터의 이름이다.

  • 예제

    • 조건의 우변에 값을 지정하고 분기처의 명칭을 직접 지정하는 경우

      /      DEFINE M1,JN,PP=NO
      \      JOB    \JN
      \A     EX     X
      \      FD     FD1=DA
      \      FD     FD2=DA
      /      IF     PP=YES,C
      \B     EX     Y
      \      FD     FD3=DA
      /      DEXIT
      \C     EX     Z
      \      FD     FD4=DA
      /      DEFEND

      위와 같이 매크로가 정의된 경우 매크로 호출에 대한 전개 결과는 다음과 같다.

      \      M1     SAMPLE,PP=YES

      [ 결과 ]

      \      JOB    SAMPLE
      \A     EX     X
      \      FD     FD1=DA
      \      FD     FD2=DA
      \C     EX     Z
      \      FD     FD4=DA
    • 조건의 우변과 분기처에 파라미터 이름을 지정하는 경우

      /      DEFINE TEST1,JN,AA=YES,BB=YES,SS=
      \      JOB    \JN
      \A     EX     V
      \      FD     FD1=DA
      \      FD     FD2=DA
      /      IF     AA^=\BB,\SS
      \B     EX     W
      \      FD     FD3=DA
      /C     NOP
      \      EX     X
      \      FD     FD4=DA
      /      DEFEND

      위와 같이 매크로가 정의된 경우 매크로 호출에 대한 전개 결과는 다음과 같다.

      \      TEST1  SAMPLE1,AA=NO,SS=C

      [ 결과 ]

      \      JOB    SAMPLE1
      \A     EX     V
      \      FD     FD1=DA
      \      FD     FD2=DA
      \      EX     X
      \      FD     FD4=DA

7. MSG 문

OpenFrame에서는 문법 오류만 검사하고 사용하지 않는다.

  • 사용법

    /[명칭]△¹MSG△¹[메시지]
    항목 설명

    명칭

    명칭 기술 위치로 "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    MSG

    오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "MSG"라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    메시지

    콘솔에 출력할 메시지를 기술한다. 40자 이내의 인용 캐릭터 라인으로 기술한다.

8. NOP 문

NOP 문 자체는 아무 동작도 수행하지 않는다. 하지만 NOP 문의 명칭은 SKIP 문, IF 문 또는 IFN 문의 분기처로 사용될 수 있다.

  • 사용법

    /[명칭]△¹NOP△¹[주석]
    항목 설명

    명칭

    명칭 기술 위치로 "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    NOP

    오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "NOP"라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    주석

    NOP 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.

  • 예제

    /S1    NOP

9. SET 문

내부 또는 외부 파라미터의 값을 변경한다.

  • 사용법

    /[명칭]△¹SET△¹파라미터 이름1={값|\파라미터 이름2}△¹[주석]
    항목 설명

    명칭

    명칭 기술 위치로 "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    SET

    오퍼레이션 기술 위치로 명칭 뒤에 1개 이상의 공백을 두고 "SET"이라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    파라미터 이름1

    변경할 파라미터의 이름을 기술한다.

    파라미터의 값을 여기 지정된 값으로 변경한다. 인용 캐릭터 라인으로 지정한다.

    파라미터 이름2

    파라미터의 값을 여기 지정된 파라미터의 값으로 변경한다.

    주석

    상수나 파라미터 이름2 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.

  • 예제

    • 내부 파라미터의 값을 변경하는 경우

      /      DEFINE TEST,PN=A
      \      JOB    JOB1
      \      EX     \PN
      /      SET    PN=(B)
      \      EX     \PN
      \      JEND
      /      DEFEND

      위와 같이 매크로가 정의된 경우 매크로 호출에 대한 전개 결과는 다음과 같다.

      \      TEST

      [ 결과 ]

      \      JOB    JOB1
      \      EX     A
      \      EX     B
      \      JEND
    • 외부 파라미터의 값을 변경하는 경우

      /      SET    &&USER.DISP=(REF,CAT)

      위 문장은 외부 파라미터 "&USER.DISP"의 값을 "REF,CAT"으로 변경한다.

  1. 외부 파라미터는 PDS의 멤버로 관리되고 실행 환경에서는 각 노드의 TCache에 저장되어, 사용시에 TCache에 저장된 정보로 사용된다.

  2. SET &&는 TCache 정보만 갱신되고, 재기동시까지 유지된다.

  3. 외부 파라미터를 관리하는 PDS 데이터셋 설정에 대한 부분은 OpenFrame Batch "환경설정 안내서"의 'PROCLIB' 항목 및 'EPARMLIB' 설정을 참조한다.

10. SKIP 문

매크로 전개의 흐름을 SKIP 문에 기술된 명칭을 갖는 문장(작업 제어문이나 매크로 제어문)으로 이동한다. 즉, SKIP 문 이후부터 지정된 문장 이전까지의 매크로 정의 본체를 무시한다.

  • 사용법

    /[명칭]△¹SKIP△¹분기처△¹[주석]
    항목 설명

    명칭

    명칭 기술 위치로 "/"에 이어서 두 번째 칸부터 기술한다.

    8자 이내의 기호명칭이며, 생략할 수 있다. 특수문자 "."을 포함할 수 있다.

    SKIP

    오퍼레이션 기술 위치로, 명칭 뒤에 1개 이상의 공백을 두고 "SKIP"이라고 기술한다. 명칭을 생략한 경우 "/" 뒤에 1개 이상의 공백을 두고 기술한다.

    분기처

    SKIP 이후에 1개 이상의 공백을 두고 분기처를 기술한다.

    다음은 앞에서 언급한 분기처에 대한 설명이다. 분기처 기술 위치에는 명칭이나 파라미터 이름을 기술할 수 있다.

    • 명칭 : 이동하려는 곳(작업 제어문이나 매크로 제어문)의 명칭이다.

    • 파라미터 이름 : 이동하려는 곳의 명칭이 저장되어 있는 파라미터의 이름이다.

    주석

    분기처 이후에 1개 이상의 공백을 두고 기술한다. 주석은 71번째 칸까지 기술할 수 있다.

  • 예제

    • 분기처 항목 중 명칭 설정 예제

      \STEP1 EX   PGM
      \      FD   FD1=DA
      /      SKIP STEP2
      \      FD   FD2=DA
      \      FD   FD3=DA
      \STEP2 EX

      위 문장의 전개 결과는 다음과 같다.

      \STEP1 EX   PGM
      \      FD   FD1=DA
      \STEP2 EX
    • 분기처 항목 중 파라미터 이름 설정 예제

      \STEP1 EX   PGM1
      /      SKIP \PAA
      \STEP2 EX   PGM2
      \      FD   FD1=DA
      \      FD   FD2=DA
      \STEP3 EX   PGM3
      \      FD   FD3=DA

      PAA 파라미터의 값이 STEP2인 경우 위 문장의 전개 결과는 다음과 같다.

      \STEP1 EX   PGM1
      \STEP2 EX   PGM2
      \      FD   FD1=DA
      \      FD   FD2=DA
      \STEP3 EX   PGM3
      \      FD   FD3=DA

      PAA 파라미터의 값이 STEP3인 경우 위 문장의 전개 결과는 다음과 같다.

      \STEP1 EX   PGM1
      \STEP3 EX   PGM3
      \      FD   FD3=DA

11. WTOR 문

OpenFrame에서는 문법 오류만 검사하고 사용하지 않는다.

  • 사용법

    /[명칭]△¹WTOR△¹인용 캐릭터 라인,기호명칭

12. WTO 문

OpenFrame에서는 문법 오류만 검사하고 사용하지 않는다.

  • 사용법

    /[명칭]△¹WTO△¹인용 캐릭터 라인

13. 매크로 정의 본체

작업 제어 매크로의 작업 내용을 기술한다.

문장 중간에 파라미터가 들어갈 수 있다는 점 외에는 작업 제어문의 문법과 동일하다.

매크로 정의 본체에는 CHAM 문, MACRO 문, MEND 문, SCAN 문, SCEND 문을 제외한 모든 작업 제어문이 포함될 수 있다. 매크로 전개하는 경우 "\" 이후부터 다음 문자들 중 하나 이전까지의 문자열을 파라미터 이름으로 간주한다. 파라미터 이름은 기호명칭이다.

  • 사용법

    \ * , = ( ) ' ^ < > & 공백문자
  • 예제

    • 파라미터 이름의 앞에 다른 문자열이 있는 경우

      FILE=ABC\FF TEST.\K

      위 문장의 전개 결과는 다음과 같다.

      FILE=ABC<FF 파라미터의 값> TEST.<K 파라미터의 값>
    • 파라미터 이름의 뒤에 "*"과 다른 문자열이 있는 경우 "*"을 구분자로 사용한다. 매크로를 전개할 때 "*"은 삭제되고, "**"은 "*"로 바뀐다.

      \JBN*GP

      위 문장의 전개 결과는 다음과 같다.

      <JBN 파라미터의 값>GP
    • 파라미터 이름의 뒤에 또 다른 파라미터 이름이 있는 경우 파라미터 구분자 "*"을 생략해도 된다.

      \GE*\LMN FILE=\HD\SUB\SSUB

      위 문장의 전개 결과는 다음과 같다.

      <GE 파라미터의 값><LMN 파라미터의 값> FILE=<HD 파라미터의 값><SUB 파라미터의 값><SSUB 파라미터의 값>
    • "\\"가 있는 경우 "\\"은 "\"로 바뀐다.

      LSI\\\MSI

      위 문장의 전개 결과는 다음과 같다.

      LSI\<MSI 파라미터의 값>
    • "&&"가 있는 경우 "&&"은 "&"로 바뀐다.

      LST&&&EM.SSS

      위 문장의 전개 결과는 다음과 같다.

      LST&<EM.SSS 파라미터의 값>