매크로

본 장에서는 각 매크로의 사용법과 키워드에 대해서 설명한다.

각 매크로에 나열된 키워드 외에 IMS/DC에서 지원하는 키워드들을 받아들일 수 있으나, 설명하지 않는 키워드의 기능은 사용하지 않는다.

1. APPLCTN

APPLCTN 매크로는 프로그램의 속성을 지정한다.

APPLCTN 매크로 뒤로 이어지는 TRANSACT 매크로들은 해당 애플리케이션을 사용하는 트랜잭션을 지정한다.

  • 사용법

    >>-APPLCTN--PSB=name-------------------------------------------->
    
    >--+-------------------------------------------------+---------->
       |             .-TP----.           .-,1-----.      |
       '-,PGMTYPE=-(-+-------+-+-------+-+--------+----)-'
                     '-BATCH-' '-,OVLY-' '-,class-'
    
    >--+------------------------+--+------------------+------------><
       |           .-SERIAL---. |
       '-,SCHDTYP=-+----------+-'
                   '-PARALLEL-'
    키워드 설명

    PSB

    PSB 이름을 지정한다.

    PGMTYPE

    프로그램 타입과 클래스 등을 지정한다.

    • TP : MPP Region에서 실행된다.

    • BATCH : BMP Region에서 실행된다.

    • OVLY : 사용되지 않는 파라미터나 기존 문법 호환성을 유지하기 위해 있다.

    • class : 해당 애플리케이션을 사용하는 트랜잭션의 클래스가 지정되지 않은 경우, 이 매크로에서 지정한 클래스를 기본값으로 한다.

    SCHDTYP

    스케줄링 타입을 지정한다.

    • SERIAL : 해당 프로그램은 동시에 여러 개의 서버(Dependent Region)에서 수행되지 않고 한 순간에 하나의 서버에서만 수행된다.

    • PARALLEL : 동시에 여러 개의 서버(Dependent Region)에서 실행가능하다.

2. DATABASE

DATABASE 매크로는 OSI에서 사용하는 데이터베이스를 정의한다.

  • 사용법

                       .-,----.
                       V      |
    >>-DATABASE--DBD=(---name-+-)----------------------------------><
    키워드 설명

    DBD

    사용할 데이터베이스의 DBD 이름을 지정한다.

3. NAME

NAME 매크로는 물리 단말과 연결될 논리 단말의 이름 및 속성을 정의한다.

NAME 매크로는 TERMINAL 매크로의 하위에 정의힌다. TERMINAL 매크로의 아래 해당 물리 단말과 연결될 논리 단말에 대한 NAME 매크로를 1개 이상 기술한다.

  • 사용법

               .-,-----.
               V       |
    >>-NAME--+---lterm-+-------------------------------------------->
    키워드 설명

    lterm

    TERMINAL 매크로의 물리 단말과 연결될 LTERM 이름을 지정한다.

4. TERMINAL

TERMINAL 매크로는 물리 단말의 속성을 정의한다.

TERMINAL 매크로는 TYPE 매크로의 하위에 정의한다. 해당 터미널이 어느 TYPE인지를 지정하는 TYPE 매크로가 온 뒤 그 아래로 1개 이상의 TERMINAL 매크로를 정의한다.

  • 사용법

    >>-TERMINAL--NAME=nodename-------------------------------------->
    
    >--+----------------------------+------------------------------->
       |            .-CONSOLE--.    |
       '-COMPT1=+-(-+----------+-)--'
                    '-PRINTER1-'
    
    >--+----------------------------------------------------+------->
       '-,FEAT=--(--+-----+--)------------------------------'
                    +-F1--+
                    +-F2--+
                    +-F3--+
                    +-F4--+
                    +-F5--+
                    +-F6--+
                    +-F7--+
                    +-F8--+
                    +-F9--+
                    '-F10-'
    
    >--+-----------------------------+-----------------------------><
       |               .-PROT---.    |
       '-,OPTIONS=-+-(-+--------+-)--'
                       '-UNPROT-'
    키워드 설명

    NAME

    물리 단말의 이름을 지정한다.

    COMPT1

    단말의 컴포넌트 타입 지정한다.

    • CONSOLE : 콘솔 타입

    • PRINTER1 : 프린터 타입

    FEAT

    터미널의 feature을 지정한다.

    • F1...F10 : 사용자 정의 feature로 MFS에서 해당 번호에 맞는 속성을 사용할수 있다.

    OPTIONS

    터미널과 관련한 각종 커뮤니케이션 옵션을 설정한다.

    • PROT : 단말을 보호 모드로 하여 해당 단말로 전해지는 메시지를 막는다. 메시지를 받으려면 PA1이나 PA2 키를 이용한다.

    • UNPROT : 단말을 비보호 모드로 하여 해당 단말로 메시지가 보내진다.

5. TRANSACT

TRANSACT 매크로는 트랜잭션의 이름과 속성을 지정한다.

TRANSACT 매크로는 APPLCTN 매크로의 하위에 정의한다. APPLCTN 매크로 뒤에 1개 이상의 TRANSACT 매크로를 지정하며, 트랜잭션들은 그 위에 정의된 APPLCTN에서 지정한 애플리케이션을 사용한다.

  • 사용법

                          .-,----------------.
                          V                  |
    >>-TRANSACT--CODE=(-----transaction code-+---)------------------>
    
    >--+------------------------------+----------------------------->
       |         .-UC--.              |
       '-,EDIT=(-+-----+-,-+------+-)-'
                 '-ULC-'   '-name-'
    
    >--+------------------------------------------------------+----->
       |            .-MULTSEG-. .-,NONRESPONSE-. .-,1-----.   |
       '-,MSGTYPE=(-+---------+-+--------------+-+--------+-)-'
                    '-SNGLSEG-' '-,RESPONSE----' '-,class-'
    
    >--+-------------------------------------------+---------------->
       |            .-65535-. .-,65535---------.   |
       '-,PROCLIM=(-+-------+-+----------------+-)-'
                    '-count-' '-,limit seconds-'
    
    >--+--------------------------------------------------+--------->
       |         .-1------. .-,1-----. .-,65535-------.   |
       '-,PRTY=(-+--------+-+--------+-+--------------+-)-'
                 '-normal-' '-,limit-' '-,limit count-'
    
    >--+--------------------+--------------------------------------->
       |           .-0----. |
       '-,SEGSIZE=-+------+-'
                   '-size-'
    
    >--+------------------+------+--------------------------+------->
       |          .-NO--. |      |            .-,STRUNC-.   |
       '-,SERIAL=-+-----+-'      '-,SPA=(size-+---------+-)-'
                  '-YES-'                     '-,RTRUNC-'
    >--+----------+-------------------------------------------------><
       '-,WFI-----'
    키워드 설명

    CODE

    트랜잭션 이름을 지정한다.

    동일한 속성을 가지는 트랜잭션을 여러 개를 지정할수 있다. 있다.

    EDIT

    입력 메시지가 트랜잭션으로 전달되기 전에 전처리를 수행한다.

    • UC : 입력 메시지에 소문자가 포함된 경우 대문자로 변환한다.

    • ULC : 입력 메시지의 소문자를 변환하지 않는다.

    • name : 현재 지원하지 않으나 호환성을 위해 옵션값은 받아 들인다.

    MSGTYPE

    트랜잭션의 메시지 처리형태와 클래스를 지정한다.

    • MULTSEG : 멀티 세그먼트를 사용한다.

    • SNGLSEG : 싱글 세그먼트를 사용한다. OSI에서는 항상 멀티 세그먼트를 사용하므로 무시한다.

    • NONRESPONSE : 터미널이 메시지를 입력 후 응답을 받지 않은 상태에서도 추가로 메시지를 보낼 수 있다.

    • RESPONSE : 터미널이 메시지를 입력 후 응답을 받을 때까지 추가로 메시지를 보낼 수 없다.

    • class : 트랜잭션의 클래스를 지정한다. 생략하는 경우 APPLCTN의 클래스를 사용하게 된다.

    PROCLIM

    트랜잭션을 처리하는 경우 메시지 처리의 제약조건을 지정한다.

    • count : 한 번의 애플리케이션 프로그램을 로딩할 때 재로딩 없이 최대 몇 개의 메시지를 처리할 것인지를 지정하는 인자로 현재 OSI에서는 사용되지 않는다.

    • limit seconds : 트랜잭션이 하나의 메시지를 처리하는 제한시간이다. Mainframe 시스템에서의 PROCLIM 값은 cpu time으로 적용되는데 반해 OpenFrame에서는 transaction time으로 처리하고 있기 때문에 실제로는 3배를 곱한 시간이 적용된다.

    PRTY

    트랜잭션의 우선순위 및 한계 우선순위에 관한 속성을 지정한다.

    • normal : 일반적인 경우의 우선순위이다.

    • limit, limit count : 해당 트랜잭션을 대상으로 하는 메시지가 limit count개 이상 큐잉된 경우 우선순위를 limit로 변경한다. 메시지가 0개가 되면 다시 우선순위가 normal로 바뀐다. 현재 OSI에서는 지원하지 않는다.

    SEGSIZE

    세그먼트의 최대 길이를 지정한다.

    SERIAL

    트랜잭션의 시리얼 처리 여부 지정한다.

    • YES : 트랜잭션을 시리얼로 처리한다. 해당 프로그램은 동시에 여러 개의 서버(Dependent Region)에서 수행되지 않고 한 순간에 하나의 서버에서만 수행된다.

    • NO : 트랜잭션을 시리얼로 처리하지 않는다. 동시에 여러 개의 서버(Dependent Region)에서 실행가능하다.

    SPA

    SPA(Scratch pad area)의 크기를 설정한다.

    • size : SPA의 길이를 설정한다.

    • STRUNC, RTRUNC : OSI에서는 사용되지 않는 옵션이다.

    WFI

    BMP 트랜잭션의 속성으로 제한되며, MQ에 데이터가 없어도 트랜잭션이 종료되지 않고 대기하는 기능이다.

6. TYPE

TYPE 매크로는 단말들의 집합의 속성을 지정한다.

TYPE 매크로 하위로 1개 이상의 TERMINAL 매크로가 이어진다. TYPE 매크로에서는 TERMINAL 매크로의 옵션 키워드들도 넣어줄 수 있는데 (EDIT, LTERM, COMPT, COMPT1~COMPT4 제외), 여기서 지정한 값은 아래 이어지는 TERMINAL에서 생략된 경우 기본값으로 사용한다.

  • 사용법

    >>-TYPE--------------------------------------------------------><

7. COPY

COPY 매크로는 osisdgen를 수행할 때 지정된 대상 파일뿐만 아니라 같은 디렉터리에 존재하는 다른 파일의 시스템 정의도 동시에 등록하고자 할 때 사용된다.

COPY 매크로는 파라미터로 파일명을 요구한다. 만일 지정된 파일명이 같은 디렉터리에 없을 경우 무시된다.

  • 사용법

    >>-COPY--filename---------------------------------------------><
  • osisdgen 수행 예시

    TESTCOPY 파일과 TEST0이 동일한 디렉터리에 존재하고 TESTCOPY에 다음과 같은 COPY 매크로가 존재할 경우의 예시이다.

    ...
    COPY TEST0
    ...
    $ osisdgen -d TESTCOPY IMSA
    [2020-12-30T10:30:32.438748] [osisdgen(5733)          ] [M] [OSI7203M] Processing result : Success[43], Ignore[0], Error[0]
    =================================
    Copy sd file TEST0
    =================================
    [2020-12-30T10:30:32.474049] [osisdgen(5739)          ] [M] [OSI7203M] Processing result : Success[4], Ignore[0], Error[0]