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
-
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는 아래와 같이 설정할수 있다.
|
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 |
필드 속성을 지정한다.
|
EATTR |
필드의 확장 속성을 지정한다.
|