MFS 정의문

본 장에서는 MFS 포맷 파일을 작성할때 사용하는 매크로들에 대해 알아본다.

1. 개요

MFS 포맷 파일은 크게 메시지 정의문과 포맷 정의문으로 구성된다. 각각 계층구조를 가지고 있으며 메시지 정의문은 MID와 MOD, 포맷 정의문은 DIF와 DOF를 생성한다.

다음은 매크로 정의에 사용되는 규약에 대한 설명이다. 각 매크로의 정의를 이해하는 데 참고한다.

표기 의미

>>---

문법의 시작

--->

다음 줄로 이어짐

>---

이전 줄에서 이어짐

---><

문법의 끝

>>-------필수항목----------><

반드시 기술해야 하는 항목

>>---+---필수선택1---+-----><
     '---필수선택2---'

반드시 하나를 선택해야 하는 항목

>>---+---------------+-----><
     +---임의선택1---+
     '---임의선택2---'

경우에 따라 선택할 수도 안할 수도 있는 항목

     .---디폴트항목---.
>>---+----------------+----><

기본값을 나타낸다.

     .---------------.
     V               |
>>---+---반복항목----+-----><

반복하여 기술할 수 있는 항목

2. 메시지 정의문

메시지 정의문의 구조는 아래와 같다. 1개의 MSG 문 아래 여러 개의 LPAGE 문을 정의할수 있고, SEG 문, MFLD 문 역시 계층구조로 정의한다.

MSG
   LPAGE
        PASSWORD
        SEG
           DO
             MFLD
             ....
           ENDDO
        SEG
        ....
   LPAGE
   ....
MSGEND

2.1. MSG 문

메시지 정의문의 시작을 나타낸다.

  • MSG TYPE=INPUT 또는 OUTPUT인 경우

    >>-label--MSG--+------------------+----------------------------->
                   |       .-INPUT--. |
                   '-TYPE=-+-OUTPUT-+-'
    
    >--,SOR=(formatname)-------------------------------------------->
    
    >--+--------------------------+--------------------------------><
       '-,NXT=msgcontrolblockname-'
    Keywords 설명

    TYPE

    해당 정의문이 INPUT인지 OUTPUT인지 지정한다.

    SOR

    포맷 정의문의 이름을 지정한다.

    NXT

    다음에 참조할 MID 혹은 MOD 이름을 지정한다.

    현재 정의문이 INPUT이면 MOD 이름, OUTPUT 이면 MID 이름을 기술한다.

  • MSG TYPE=OUTPUT인 경우

    >>-+----------------+------------------------------------------><
       |        .-NO--. |
       '-,PAGE=-+-YES-+-'
    Keywords 설명

    PAGE

    OLP(Operator Logical Paging) 기능 사용 여부를 지정한다. (미지원)

2.2. LPAGE 문

논리페이징을 사용하는 경우 LPAGE 문을 지정해야 한다. 현재 MSG TYPE=INPUT에 대한 논리페이징은 지원하지 않는다.

  • MSG TYPE=OUTPUT인 경우

    >>-+-------+--+----------------------+-------------------------->
       '-label-'  '-LPAGE--SOR=dpagename-'
    
    >--+--------------------------------------------------+--------->
       '-,COND=(-+-mfldname-----+--,--+->--+--,'value'--)-'
                 +-mfldname(pp)-+     +-<--+
                 '-segoffset----'     +-≥--+
                                      +-≤--+
                                      +-=--+
                                      '-!=-'
    >--+--------------------------+--------------------------------><
       '-,NXT=msgcontrolblockname-'
    Keywords 설명

    SOR

    해당 LPAGE를 위한 포맷 정의문의 DPAGE 이름을 지정한다.

    COND

    LPAGE 중 1개의 LPAGE를 선택하기 위한 조건을 지정한다.

    NXT

    다음 메시지를 처리하는 경우 사용할 MID 이름을 지정한다.

    이 항목을 지정하면 MSG 문에서 지정한 MID 이름은 무시한다.

2.3. SEG 문

애플리케이션에서 멀티세그먼트 메시지를 사용하는 경우 여러 개의 SEG 문을 정의한다.

  • MSG TYPE=INPUT인 경우

                                  .-YES-.
    >>-+-------+--SEG ---GRAPHIC=-+-NO--+--------------------------><
       '-label-'
    Keywords 설명

    GRAPHIC

    YES이고 TRANSACT(system definition)의 EDIT=UC이면 소문자를 대문자로 변환한다.

  • MSG TYPE=OUTPUT인 경우

    >>-+-------+--SEG ----------------------------><
       '-label-'

2.4. PASSWORD 문

PASSWORD문 아래 정의되어 있는 MFLD문에 입력 데이터를 PASSWORD로 하여 tacf 로그온 인증을 받는다. 인증시 사용되는 USERID는 입력받은 터미널에 접속하고 있는 USER의 ID이다. SEG 문 제일 앞에 지정하여 사용할 수 있다.

  • >>-+-------+--PASSWORD ---+-blank----+--------------------------><
                              '-comments-'
    Keywords 설명

    comments

    주석을 의미한다.

2.5. DO 문

반복되는 MFLD 문을 정의할때 사용한다. DO 문을 사용하는 경우에는 매크로 전처리기(macroprep)를 사용해서 전처리 후, MFS 포맷 컴파일러 툴(osimfsgen)을 사용해야 한다.

>>-+-------+--DO--count----------------------------------------><
   '-label-'

2.6. MFLD 문

단말에서 애플리케이션에 전달할 필드(TYPE=INPUT), 애플리케이션에서 단말로 전달할 필드(TYPE=OUTPUT)를 각각 정의한다.

  • MSG TYPE=INPUT인 경우

    >>-+-------+--MFLD--+------------------------+------------------>
       '-label-'        '-(dfldname-,'literal'-)-'
    
    >--+-------------------+--+--------------+---------------------->
       |       .-1-------. |  |        .-L-. |
       '-,LTH=-+-nn------+-'  '-,JUST=-+-R-+-'
    
    >--+-----------------------------------------------------------><
        '-,FILL=-+-X'40'-+-'
                 +-X'hh'-+
                 +-C'c'--+
                 '-NULL--'
    Keywords 설명

    (dfldname,'literal')

    단말로부터 받은 데이터가 없는 경우 'literal’로 지정한 값을 애플리케이션에 전달한다.

    LTH

    필드의 길이를 지정한다.

    JUST

    좌, 우 정렬을 지정한다.

    FILL

    단말로부터 받은 데이터의 길이가 MFLD의 길이보다 짧을때 남는 부분을 채울 문자를 지정한다.

    FILL=NULL이면 남는 자리를 채우지 않고 받은 만큼만 애플리케이션으로 보낸다. 이 경우 애플리케이션에서 가변길이 데이터 처리를 해야한다.

    기본값은 X'40’이며, FIILL=X'3F’는 FILL=NULL과 동일하다.

    FILL=X'00’은 FILL=NULL과 달리 남은 자리를 '00’으로 패딩한다.

  • MSG TYPE=OUTPUT인 경우

    >>-+-------+--MFLD--+----------------------------+-------------->
       '-label-'        +-dfldname-------------------+
                        +-(dfldname, system-literal)-+
                        +-(dfldname, 'literal')------+
    
    >--+--------------+--------------------------------------------->
       |       .-1--. |
       '-,LTH=-+-nn-+-'
    
    >--+---------------------------+-------------------------------><
       |         .-NO--.           |
       '-,ATTR=(-+-----+-+-----+-)-'
                 '-YES-' '-,nn-'
    Keywords 설명

    (dfldname,system-literal)

    시스템 리터럴을 지정한다. 시스템 리터럴에 대한 자세한 내용은 시스템 리터럴을 참고한다.

    (dfldname,'literal')

    DFLD에 넣을 문자열을 'literal’로 지정한다. 해당 MFLD의 데이터는 프로그램에서 화면에 보내는 데이터에 포함되어 있어선 안된다.

    LTH

    필드의 길이를 지정한다.

    ATTR

    DFLD에 지정한 ATTR(YES or NO)과 EATTR(nn)을 동적으로 변경할때 사용한다. 동적 속성 변경에 대한 자세한 내용은 동적 속성 변경을 참고한다.

시스템 리터럴

다음은 시스템 리터럴에 대한 설명이다.

시스템 리터럴 포맷 설명

LTSEQ

nnnnn

논리단말에 대한 출력 메시지 번호

LTNAME

aaaaaaaa

논리단말명

TIME

HH:MM:SS

시스템 시각

DATE1 or YYDDD

YY.DDD

시스템 날짜

DATE2 or MMDDYY

MM/DD/YY

시스템 날짜

DATE3 or DDMMYY

DD/MM/YY

시스템 날짜

DATE4 or YYMMDD

YY/MM/DD

시스템 날짜

DATE1Y4 or YYYYDDD or DATEJUL

YYYY.DDD

시스템 날짜

DATE2Y4 or MMDDYYYY or DATEUSA

MM/DD/YYYY

시스템 날짜

DATE3Y4 or DDMMYYYY or DATEEUR

DD/MM/YYYY

시스템 날짜

DATE4Y4 or YYYYMMDD or DATEISO

YYYY/MM/DD

시스템 날짜

LPAGENO

nnnn

현재 논리 페이지 번호

동적 속성 변경

동적 속성 변경은 다음의 경우에 사용한다.

  • ATTR=YES

    DFLD의 ATTR에서 지정한 속성을 변경할 때 사용한다. 이때 애플리케이션이 보내는 데이터에는 추가적으로 2bytes의 속성데이터를 포함하고 있으므로, LTH도 이 2bytes 데이터를 포함한 길이로 지정해야 한다.

    예를 들어 실제 화면에 데이터의 길이가 5bytes인 경우 아래처럼 LTH를 지정한다.

    ATTR=YES이면, LTH=2+5=7
  • ATTR=(,nn)

    DFLD의 EATTR에서 지정한 속성을 변경할 때 사용한다. EATTR의 속성데이터도 2byte로 구성되므로 nn으로 지정한 값에 2배를 한 값을 길이에 포함해야 한다.

    예를 들어 실제 데이터의 길이가 5bytes인 경우 아래처럼 LTH를 지정한다. 자세한 내용은 MFS 기능을 참고한다.

    • ATTR=(NO,3) or ATTR=(,3)인 경우

      LTH=  2*3+5=11
    • ATTR=(YES,3)인 경우

      LTH=2+2*3+5=13

2.7. ENDDO 문

DO 문을 사용하는 경우 ENDDO 문으로 반복문의 끝을 명시해야 한다.

>>-+-------+--ENDDO--+-blanks---+------------------------------><
   '-label-'         '-comments-'

2.8. MSGEND 문

메시지 정의문의 끝을 나타낸다.

>>-+-------+--MSGEND--+-blanks---+-----------------------------><
   '-label-'          '-comments-'

3. 포맷 정의문

포맷 정의문의 구조는 아래와 같다. 1개의 FMT 문 아래 여러 개의 DEV 문을 정의할수 있고, DEV 문 아래 DIV 문, DPAGE 문, DFLD 문도 이와 동일하게 계층구조로 정의한다.

FMT
   DEV
      DIV
         DPAGE
              DO
                DFLD
                ....
              ENDDO
         DPAGE
         ....
   DEV
   ....
FMTEND

3.1. FMT 문

포맷 정의문의 시작을 나타낸다.

>>-label--FMT--+-blanks---+------------------------------------><
               '-comments-'

3.2. DEV 문

디바이스 속성을 설정한다.

>>-+-------+--DEV--TYPE--+-3270-----------+--------------------->
   '-label-'             +-(3270,2)-------+
                         '-3270-An--------'

>--+------------------------------------------------+----------->
   '-,FEAT=-+-IGNORE------------------------------+-'
            +-1-----------------------------------+
            +-2-----------------------------------+
            +-3-----------------------------------+
            +-4-----------------------------------+
            +-5-----------------------------------+
            +-6-----------------------------------+
            +-7-----------------------------------+
            +-8-----------------------------------+
            +-9-----------------------------------+
            +-10----------------------------------+

>--+-------------------+--+---------------------+--------------->
   '-,SYSMSG=dfldlabel-'  '-,DSCA=---X'value'---'

>--+--------------------------------------------------+--------><
   |                   .-,-------------.              |
   |                   V               |              |
   '-,PFK=(dfldname,-+----'literal'-----------------)-'
                     | .-,----------------------. |
                     | V                        | |
                     '---integer=---'literal'---+-'
Keywords 설명

TYPE

OSI는 TN3270 단말을 지원한다.

FEAT

TERMINAL(시스템 정의)의 FEAT를 Fn(n은 1~10사이의 숫자)으로 설정한 경우, DEV 중 FEAT의 값이 n인 DEV를 선택한다.

해당하는 DEV가 없는 경우 IGNORE로 설정한 DEV를 기본값으로 선택한다.

예를 들어 TERMINAL의 FEAT=F2로 정의했다면, DEV중 FEAT=2인 DEV를 선택하는데, 만약 FEAT=2인 DEV가 없으면 FEAT=IGNORE인 DEV가 선택된다.

SYSMSG

시스템 메시지를 표시할 DFLD를 지정한다.

DSCA

DSCA(Default System Control Area)는 단말에 화면을 표시할 때 몇 가지 기본 설정들을 지정한다. 예를 들면 화면에 있던 것을 지우고 쓸것인지, 그냥 쓸것인지 등등을 지정한다.

포맷은 X’hhhh’으로 2Bytes 문자인데, TN 3270 단말에서 첫 번째 Byte는 0으로 정해져있다.

두 번째 Byte는 아래와 같이 설정할수 있다.

  • 0 : 1로 고정한다.

  • 1 : 화면을 모두 지우고 쓴다.

  • 2 : 비보호 필드를 지우고 쓴다.

  • 3 : 알람을 설정한다.

  • 4 : 결과를 프린터로 보낸다. (미지원)

  • 5 : 화면 출력후 보호모드 설정 여부를 설정한다. (0이면 보호,1이면 비보호, 미지원)

  • 6-7 : 0으로 고정

PFK

PFK(Program Function Key)에 대한 리터럴이나 커맨드를 지정한다.

dfldname은 입력된 PFK에 일치하는 'literal’을 저장하는 필드로, MFLD 문에서 해당 값을 참조할때 사용한다. dfldname 다음의 파라미터들은 'literal’만 정의하거나 숫자와 함께 정의할수 있다.

3.3. DIV 문

다음은 DIV 문의 형식이다.

>>-+-------+--DIV--+------------------+------------------------><
   '-label-'       |       .-INOUT--. |
                   '-TYPE=-+-OUTPUT-+-'
Keywords 설명

TYPE

현재 정의문이 OUTPUT인지, INOUT인지를 지정한다.

3.4. DPAGE 문

정의할 때 DPAGE 문을 지정해야 한다. LPAGE의 SOR에서 지정한 값이 DPAGE의 label 이름이다.

>>-+-------+--DPAGE--------------------------------------------->
   '-label-'

>--+-----------------------------+-----------------------------><
   '-CURSOR=(------lll,ccc-----)-'
Keywords 설명

CURSOR

커서 위치를 지정한다. 기본값은 (1,2)이다.

3.5. DO 문

일정하게 반복되는 DFLD 문을 정의할 때 사용한다. DO 문을 사용하는 경우에는 매크로 전처리기(macroprep)를 사용해서 전처리 후 MFS 포맷 컴파일러 툴(osimfsgen)을 사용해야 한다.

>>-+-------+--DO--count----------------------------------------><
   '-label-'

3.6. DFLD 문

단말로부터 데이터를 입력받거나 표시하는 데 사용하는 필드를 지정한다.

>>-+-------+--DFLD--+-----------+--,POS=(lll,ccc)--------------->
   '-label-'        '-'literal'-'

>--+----------+------------------------------------------------->
   '-,LTH=nnn-'

>--+---------------------------------------+-------------------->
   |         .-ALPHA-. .-,NOPROT-.         |
   '-,ATTR=(-+-------+-+---------+-| A |-)-'
             '-NUM---' '-,PROT---'

>--+--------------------------------------------------------+--><
   '-,EATTR=(-+--------+-+----------+-+-----------+-| B |-)-'
              +-HD-----+ +-,CD------+ '-,EGCS-----'
              +-HBLINK-+ +-,BLUE----+
              +-HREV---+ +-,RED-----+
              '-HUL----' +-,PINK----+
                         +-,GREEN---+
                         +-,TURQ----+
                         +-,YELLOW--+
                         '-,NEUTRAL-'

A

               .-,NORM---.  .-,NOMOD-.
|--+-,------+--+---------+--+--------+--+-,--------+------------|
               +-,NODISP-+  '-,MOD---'
               '-,HI-----'

B

|--+-,-------------+--+-----------+-----+-------+---------------|
                      +-,OUTL-----+     '-,MIX--'
                      +-,BOX------+
                      +-,RIGHT----+
                      +-,LEFT-----+
                      +-,UNDER----+
                      '-,OVER-----'
Keywords 설명

POS

필드의 위치를 지정한다.

LTH

필드의 길이를 지정한다.

ATTR

필드 속성을 지정한다.

  • ALPHA : 문자숫자 필드

  • NUM : 숫자 필드(3270에뮬레이터에서 지원되지 않아 실제 기능은 지원안됨)

  • NOPROT: 입력 필드

  • PROT : 보호 필드

  • NORM : 평균 밝음 속성

  • NODISP : 숨김 필드

  • HI : 매우 밝음 속성

  • NOMOD : 화면의 데이터를 변경했을때만 데이터를 전송

  • MOD : MDT(Modified Data Tag)를 on으로 설정하여 데이터를 변경하지 않아도 해당 필드의 데이터를 전송

EATTR

필드의 확장 속성을 지정한다.

  • HD : 기본 하이라이팅

  • HBLINK : 깜빡거림

  • HREV : 반전

  • HUL : 언더라인

  • CD : 기본 컬러

  • BLUE : 파란색

  • RED : 빨간색

  • PINK : 분홍색

  • GREEN : 초록색

  • TURQ : 청록색

  • YELLOW : 노란색

  • NEUTRAL: 화면출력하는 경우 흰색, 프린터 출력하는 경우 검정색

  • EGCS : 2Byte문자 필드

  • OUTL : 기본 아웃라인

  • BOX : 좌우상하 라인

  • RIGHT : 우 라인

  • LEFT : 좌 라인

  • UNDER : 하 라인

  • OVER : 상 라인

  • MIX : 1Byte문자와 2Byte문자가 섞인 필드(sosi가 포함되어 있어야 한다)

3.7. ENDDO 문

DO 문을 사용하는 경우 ENDDO 문으로 반복문의 끝을 명시해야 한다.

>>-+-------+--ENDDO--+-blanks---+------------------------------><
   '-label-'         '-comments-'

3.8. FMTEND 문

메시지 정의문의 끝을 나타낸다.

>>-+-------+--MSGEND--+-blanks---+-----------------------------><
   '-label-'          '-comments-'