Map Source Code 작성
본 장에서는 Map Source Code를 작성하기 위해 필요한 IBM 어셈블러 매크로 형식에 대해서 설명한다.
1. Map 작성 규칙
Map Source Code에는 하나 이상의 필드(Field), 맵(Map), 맵 셋(Mapset)을 정의할 수 있다.
Field < Map < Mapset으로 계층 구조를 이루며 각 항목에 대한 설명은 다음과 같다.
구분 | 설명 |
---|---|
필드(Field) |
터미널 화면에 보이는 개별 항목들에 대응되는 개념이다. 필드는 속성과 값으로 이루어져 있으며, Map Source Code에 기본값을 정의하거나 애플리케이션에서 새로운 값을 지정할 수 있다. |
맵(Map) |
터미널에 나타나는 한 화면에 대응되는 개념이다. 맵에는 맵 전체에 해당되는 속성 외에 맵에 소속된 필드에서 기본적으로 사용될 수 있는 몇 가지 속성을 지정할 수 있다. 개별 필드의 속성이 있을 경우 필드의 속성이 우선한다. |
맵 셋(Mapset) |
맵의 집합을 의미하는 논리적 개념이다. 하나의 맵 셋에는 반드시 1개 이상의 맵 정의가 포함되어 있어야 한다. 맵 셋에도 자신에게 포함된 맵이나 필드의 기본 적용 속성을 지정할 수 있다. 속성의 적용 우선 순위는 가장 낮다. |
Map Source Code는 IBM 어셈블러 매크로 형식이므로 IBM 어셈블러 매크로의 문법 및 제약 조건을 그대로 따른다.
다음은 IBM 어셈블러 매크로 문법 및 제약 조건 외에 Map Source Code를 작성할 때 지켜야 할 규칙들이다.
-
이름(필드 이름, 맵 이름, 맵 셋 이름)은 1번째 열에서부터 시작한다. 맵과 맵 셋 이름은 최대 7자까지 가능하다. 필드 이름은 7자를 넘어가는 것이 가능하나, 맵을 사용하는 애플리케이션 프로그램에서 사용하는 언어에서 지원하는 변수명의 최대 길이를 넘을 수는 없다. (COBOL의 경우에는 29Byte)
-
맵 명령어는 10번째 열에서부터 시작한다.
맵 명령어 시작 부분에는 다음 3가지 매크로 구문이 와야 한다.
항목 설명 DFHMDF
필드를 선언하는 매크로이다.
DFHMDI
맵을 선언하는 매크로이다.
DFHMSD
맵 셋을 선언하는 매크로이다.
-
각 매크로 이후에는 키워드가 올 수 있다. 매크로와 키워드는 한 칸의 공백으로 구분한다. 매크로에 따라서 사용할 수 있는 키워드의 종류는 본 안내서의 매크로 키워드에서 설명한다.
-
여러 개의 키워드가 오는 경우 각 키워드 사이에 콤마(,) 기호를 삽입해서 구분한다. 모든 키워드 사이에는 공백이 삽입될 수 없다.
-
옵션값을 받을 수 있는 키워드는 키워드와 옵션값을 등호(=) 기호를 통해서 연결한다. 옵션값에 여러 개의 속성을 지정할 수 있는 경우에는 옵션의 시작과 끝을 괄호(())를 사용해서 묶고 각 옵션 사이에는 콤마(,) 기호를 삽입한다. 옵션 사이에도 공백은 삽입될 수 없다.
-
키워드는 71번째 열까지 작성 가능하다. 71번째 열을 벗어나서 작성되어야 할 경우에는 행을 분할할 수 있다. 행 분할은 키워드를 구분하는 콤마(,) 기호를 기준으로 분할하며, 다음 행이 연결된다는 것을 표시하기 위해 72번째 열에 공백을 제외한 문자를 입력해야 한다. 다음 행에 이어서 작성할 때에는 16번째 열부터 나머지 부분을 이어서 작성한다.
-
필드의 초깃값을 입력하는 키워드(INITIAL, XINIT, GINIT)의 옵션 중간에서 행을 분할해야 할 경우에는 바로 앞에서 설명한 룰이 적용되지 않는다. 이 때는 71번째 열까지 문자를 입력한 후 72번째 행에 공백을 제외한 문자를 입력함으로써 행을 분할할 수 있다. 다음 행의 16번째 행에 나머지 값을 계속해서 입력한다.
-
초깃값을 입력할 때에는 초깃값의 시작과 끝을 작은따옴표(' ')를 사용해서 묶는다. 초깃값에 작은따옴표(' ')가 나타나야 할 때에는 작은따옴표(' ')를 2개 사용한다(1개는 맵 컴파일러에서 제거한다). 괄호(())의 경우에도 맵 컴파일러에서 특수한 용도로 인식하므로 괄호 2개를 사용하는 방식으로 입력해야 한다.
-
한 행을 주석처리하고 싶은 경우에는 1번째 열에 애스터리스크(*) 기호를 사용한다. 2번째 열부터 71번째 열까지 사용자 주석으로 사용할 수 있다.
-
초깃값을 제외한 모든 키워드와 옵션값에는 대문자만 사용할 수 있다.
2. 매크로 키워드
DFHMDF, DFHMDI, DFHMSD 매크로에 사용할 수 있는 키워드를 설명한다.
2.1. DFHMDF
DFHMDF는 맵을 구성하는 필드를 정의하는 매크로로 다음과 같은 키워드를 지정할 수 있다.
-
ATTRB
-
필드 속성을 지정하는 키워드로 다음의 옵션으로 지정할 수 있다.
-
속성은 '(ASKIP,PROT,(UNPROT{,NUM}))','(BRT,NORM,DRK)', '(DET,IC,FSET)' 3개의 그룹에서 그룹마다 1개씩 지정할 수 있다.
옵션 내용 ASKIP
필드에 커서가 위치할 수 없게 한다. 커서를 위치시키려 하면 다음 필드로 자동으로 넘어간다. PROT, UNPROT 속성과 함께 사용할 수 없다.
PROT
필드에 값을 변경할 수 없게 한다. ASKIP, UNPROT 속성과 함께 사용할 수 없다.
UNPROT
필드에 커서가 위치하고 값을 변경할 수 있다. ASKIP, PROT 속성과 함께 사용할 수 없다.
NUM
필드에 숫자만 올 수 있도록 지정한다. UNPROT 속성이 설정되었을 경우만 NUM 속성을 설정할 수 있다.
BRT
필드를 밝게 표시한다. DRK, NORM 속성과 함께 사용할 수 없다.
NORM
필드를 표준 밝기로 표시한다. 생략이 가능하며, BRT, DRK 속성과 함께 사용할 수 없다.
DRK
필드를 화면에 보이지 않게 한다. BRT, NORM 속성과 함께 사용할 수 없다. 또한 DET 속성도 함께 나타날 수 없다.
DET
필드를 detectable 속성으로 지정한다. DRK 속성과 함께 사용할 수 없다.
IC
커서의 위치를 해당 필드로 지정한다. IC가 여러 필드에 나타날 경우 가장 나중에 정의된 필드의 IC가 동작한다.
FSET
필드의 modified data tag(MDT) 비트를 설정한다.
-
-
CASE
-
터미널의 TYPETERM 정의에 KATAKANA=YES로 설정하였을 경우, 필드에 영어 소문자의 사용 여부를 설정한다.
-
필드에 영어 소문자가 사용될 경우에는 MIXED로 설정하고, 가타카나를 사용할 경우에는 설정하지 않는다.
KATAKANA라는 키워드는 맵에서 사용되는 키워드가 아니고, CICS의 여러 리소스 중에서 TYPETERM이라는 리소스를 정의할 때 사용되는 키워드이다. TYPETERM에 KATAKANA라는 설정이 존재하는 이유는 Mainframe에서 사용하는 EBCDIC 코드에서 반각 가타카나 영역과 영문 소문자 영역이 중복되기 때문이다. 이로 인해서 일본어 터미널에서는 영문 소문자가 전부 반각 가타카나로 잘못 표시되므로 영문 소문자 메시지를 사용자가 읽을 수 없게 되는 문제가 발생한다. SIT(System Initialization Table, CICS의 설정 파일 역할)에 MSGCASE=UPPER라는 설정이 존재하거나 데이터를 출력할 터미널에서 사용하는 TYPETERM 정의에 KATAKANA=YES 설정이 존재하는 경우 영문 소문자를 대문자로 변경한다. 따라서 가타카나와 영문 소문자를 사용하는 경우는 CASE=MIXED로 설정한다.
-
-
COLOR
-
필드의 글자 색상을 지정한다.
-
DEFAULT 혹은 BLUE, RED, PINK, GREEN, TURQUOISE, YELLOW, NEUTRAL 색상 중 하나를 지정할 수 있다.
-
COLOR를 COLOR=으로 지정했을 경우 DEFAULT와 동일하게 처리된다.
-
COLOR를 지정하지 않으면 3270 스트림이 만들어질 때 COLOR 영역은 아무 값도 채워지지 않는다. (0x00으로도 채워지지 않고 빈 값이 되며, DEFAULT를 설정한 것과는 다르다)
-
-
GINIT
-
필드의 기본값을 설정한다.
-
문자열은 작은따옴표(' ')로 묶어준다.
-
2Byte 문자 캐릭터만 입력 가능하며, 시작과 끝에 반드시 SO와 SI를 의미하는 SPACE를 넣어주어야 한다. 그래픽 데이터 타입이 사용될 경우(PS=X’F8’) PIC G 타입 변수가 생성된다. INITIAL, XINIT과 함께 사용할 수 없다.
-
-
HILIGHT
-
필드의 강조 속성을 설정한다.
-
다음의 옵션들 중 하나를 지정할 수 있다.
옵션 내용 OFF
강조를 사용하지 않는다.
BLINK
필드를 깜빡이도록 설정한다.
REVERSE
필드의 색상이 반전된다.
(예: 검은 바탕의 초록 글자의 경우 초록 바탕에 검은 글자로 표현된다.)
UNDERLINE
필드에 밑줄을 표시한다.
-
-
INITIAL
-
필드의 기본값을 설정한다.
-
문자열은 작은따옴표(' ')로 묶어준다.
-
GINIT, XINIT과 함께 사용할 수 없다.
INITIAL 키워드를 통해서는 1Byte 문자와 2Byte 문자가 혼용될 수 있고 GINIT 키워드를 통해서는 2Byte 문자만 사용 가능하다. GINIT에 1Byte 문자를 집어넣을 경우 맵을 변환하는 경우 코드가 잘못 변환되어 정상적인 데이터 출력이 불가능하다.
-
-
JUSTIFY
-
필드에 입력된 데이터를 정렬한다.
-
다음의 옵션들을 지정할 수 있다.
옵션 내용 LEFT
필드를 왼쪽으로 정렬한다. BLANK나 ZERO가 함께 주어지지 않으면 BLANK가 적용된다.
RIGHT
필드를 오른쪽으로 정렬한다. BLANK나 ZERO가 함께 주어지지 않으면 ZERO가 적용된다.
BLANK
필드의 채워지지 않은 위치에 공백을 삽입한다. LEFT나 RIGHT가 함께 주어지지 않으면 LEFT가 적용된다.
ZERO
필드의 채워지지 않은 위치에 ‘0’을 삽입한다. LEFT나 RIGHT가 함께 주어지지 않으면 RIGHT가 적용된다.
LEFT와 RIGHT는 서로 함께 사용될 수 없고, BLANK와 ZERO도 함께 사용될 수 없다. 옵션들 중 하나만 사용되었을 경우 각 옵션에 따라 설명된 상대되는 옵션을 적용한다. JUSTIFY가 생략되었을 경우, ATTRB의 NUM 속성이 기술된 필드는 RIGHT와 ZERO를, NUM 속성이 기술되지 않은 필드는 LEFT와 BLANK를 가정한다.
-
-
LENGTH
-
필드의 길이를 지정한다.
-
1~256의 숫자를 입력할 수 있다.
-
PICIN, PICOUT이 주어진다면 LENGTH를 설정하지 않는 것이 가능하다.
-
필드의 이름이 주어지지 않았을 경우에는 0으로 설정할 수 있다.
-
해당 필드의 내용은 Symbolic Map을 생성할 때 포함되지 않으므로 프로그램에서 접근이 불가능하다.
-
-
OUTLINE
-
필드의 테두리 선을 설정한다.
-
LEFT, RIGHT, OVER, UNDER의 4가지 값들 중 1개 이상을 설정할 수 있다.
-
BOX라고 설정하면 LEFT, RIGHT, OVER, UNDER 값이 모두 설정된 것과 동일하게 작동한다.
-
-
PICIN
-
해당 필드가 애플리케이션에 주어질 때 사용될 데이터 타입을 정의한다.
-
PICIN과 PICOUT이 동시에 정의되고 LENGTH가 정의되지 않았을 때, PICIN에 지정된 데이터 타입의 길이와 PICOUT에 지정된 데이터 타입의 길이가 일치하지 않으면 에러가 발생한다.
-
-
PICOUT
-
해당 필드가 애플리케이션에서 터미널로 전송될 때 사용될 데이터 타입을 정의한다.
-
-
POS
-
필드가 표시될 터미널에서의 위치를 지정한다.
-
number로 지정하거나 (line, column)의 형식으로 지정할 수 있다. number로 지정한 경우에는 0부터 시작하는 상대 주소로 설정된다(80 x 24 화면에서 3번째 행의 4번째 열은 (80 x (3-1) + (4-1))=163이 된다).
-
-
PS
-
Programmed Symbol의 사용 여부를 결정한다.
-
1Byte의 캐릭터, 혹은 X’nn’의 형태로 Programmed Symbol의 ID를 설정하거나, BASE로 설정하여 기본 Symbol Set을 사용하도록 할 수 있다.
-
-
SOSI
-
필드에 1Byte 문자와 2Byte 문자가 섞여 나타날 수 있음을 표시한다.
-
-
TRANSP
-
필드의 배경을 투명하게 할 것인지 불투명하게 할 것인지 설정한다.
-
-
XINIT
-
필드의 기본값을 Hexa-Decimal 형태로 설정한다.
-
작은따옴표(' ')를 사용하지 않는다. GINIT, INITIAL과 함께 사용될 수 없다.
-
-
OCCURS
-
지정된 수만큼의 필드를 생성한다. 생성된 필드들은 첨자를 이용하여 동일한 이름으로 접근할 수 있다.
-
2.2. DFHMDI
DFHMDI는 맵을 정의하는 매크로로 다음과 같은 키워드를 지정할 수 있다.
-
COLOR
-
맵의 기본 색상을 지정한다.
-
DEFAULT 혹은 BLUE, RED, PINK, GREEN, TURQUOISE, YELLOW, NEUTRAL 색상 중 하나를 지정할 수 있다.
-
DFHMDF의 COLOR 항목이 설정되어 있을 경우 DFHMDF의 설정이 우선한다.
-
-
CTRL
-
맵의 특성을 설정한다.
-
다음의 옵션들 중 하나를 지정할 수 있다.
옵션 내용 PRINT
전송하는 맵 데이터를 프린팅한다.
LENGTH
프린터로 전송할 때 행의 최대 글자수를 설정한다.
FREEKB
맵을 전송할 때 키보드의 Lock을 해제한다.
ALARM
TN3270 터미널에 알람이 설정되어 있는 경우 알람을 발생시킨다.
FRSET
맵을 전송할 때 맵에 속한 모든 필드의 MDT 비트를 리셋한다.
-
-
CURSLOC
-
입력 맵의 커서가 위치한 필드의 플래그 값에 X'02' 값을 설정한다.
-
-
HEADER
-
SEND MAP ACCUM 커맨드를 이용하여 화면을 구성할 경우, 화면 상단에 고정으로 위치시키는 맵임을 지정한다.
-
-
HILIGHT
-
맵의 기본 강조 속성을 설정한다.
-
DFHMDF의 HILIGHT 항목이 설정되어 있을 경우 DFHMDF의 설정이 우선한다.
-
다음의 옵션들 중 하나를 지정할 수 있다.
옵션 내용 OFF
강조를 사용하지 않는다.
BLINK
필드를 깜빡이도록 설정한다.
REVERSE
필드의 색상을 반전한다.
(예: 검은 바탕의 초록 글자의 경우 초록 바탕에 검은 글자로 표현된다.)
UNDERLINE
필드에 밑줄을 표시한다.
-
-
OUTLINE
-
필드의 테두리 선을 설정한다.
-
LEFT, RIGHT, OVER, UNDER의 4가지 값들 중 1개 이상을 설정할 수 있다.
-
BOX라고 설정하면 LEFT, RIGHT, OVER, UNDER 값이 모두 설정된 것과 동일하게 동작한다.
-
DFHMDF의 OUTLINE 항목이 설정되어 있을 경우 적용 우선순위가 낮다.
-
-
PS
-
Programmed Symbol의 사용 여부를 결정한다.
-
1Byte의 캐릭터, 혹은 X’nn’의 형태로 Programmed Symbol의 ID를 주거나, BASE로 설정하여 기본 Symbol Set을 사용하도록 할 수 있다.
-
DFHMDF의 PS 항목이 설정되어 있을 경우 적용 우선순위가 낮다.
-
-
SOSI
-
필드에 1Byte 문자와 2Byte 문자가 섞여 나타날 수 있음을 표시한다.
-
DFHMDF의 SOSI 항목이 설정되어 있을 경우 적용 우선순위가 낮다.
-
-
TRAILER
-
SEND MAP ACCUM 커맨드를 이용하여 화면을 구성할 경우, 화면 하단에 고정으로 위치시키는 맵임을 지정한다.
-
-
TRANSP
-
맵에 속한 모든 필드의 배경을 투명하게 할 것인지 불투명하게 할 것인지 설정한다.
-
2.3. DFHMSD
DFHMSD는 맵 셋을 정의하는 매크로로 다음과 같은 키워드를 지정할 수 있다.
-
COLOR
-
맵 셋의 기본 색상을 지정한다.
-
DEFAULT 혹은 BLUE, RED, PINK, GREEN, TURQUOISE, YELLOW, NEUTRAL 색상 중 하나를 지정할 수 있다.
-
DFHMDI, DFHMDF의 COLOR 항목이 설정되어 있을 경우 적용 우선순위가 가장 낮다.
-
-
CTRL
-
맵 셋에 속한 모든 맵의 특성을 설정한다.
-
다음의 옵션들 중 하나를 지정할 수 있다.
옵션 내용 PRINT
전송하는 맵 데이터를 프린팅한다.
LENGTH
프린터로 전송할 때 행의 최대 글자수를 설정한다.
FREEKB
맵을 전송할 때 키보드의 Lock을 해제한다.
ALARM
TN3270 터미널에 알람이 설정되어 있는 경우 알람을 발생시킨다.
FRSET
맵을 전송할 때 맵에 속한 모든 필드의 MDT 비트를 리셋한다.
-
-
HILIGHT
-
맵 셋의 기본 강조 속성을 설정한다.
-
DFHMDI, DFHMDF의 HILIGHT 항목이 설정되어 있을 경우 적용 우선순위가 가장 낮다.
-
다음의 옵션들 중 하나를 지정할 수 있다.
옵션 내용 OFF
강조를 사용하지 않는다.
BLINK
필드를 깜빡이도록 설정한다.
REVERSE
필드의 색상을 반전한다.
(예: 검은 바탕의 초록 글자의 경우 초록 바탕에 검은 글자로 표현된다.)
UNDERLINE
필드에 밑줄을 표시한다.
-
-
LANG
-
해당 맵 셋을 사용하는 언어를 설정한다.
-
COBOL,PLI 중 1개를 지정할 수 있다. 단, COBOL을 지정하지 않는 경우 컴파일할 때 Symbolic Map을 생성하지 않는다.
-
-
MODE
-
맵 셋 입출력 모드를 설정한다. IN, OUT, INOUT 값들 중 1개를 지정할 수 있다.
-
-
OUTLINE
-
필드의 테두리 선을 설정한다.
-
LEFT, RIGHT, OVER, UNDER의 4가지 값들 중 1개 이상을 설정할 수 있다.
-
BOX라고 설정하면 LEFT, RIGHT, OVER, UNDER 값이 모두 설정된 것과 동일하게 동작한다.
-
DFHMDI, DFHMDF의 OUTLINE 항목이 설정되어 있을 경우 적용 우선순위가 가장 낮다.
-
-
PS
-
Programmed Symbol의 사용 여부를 결정한다.
-
1Byte의 캐릭터, 혹은 X’nn’의 형태로 Programmed Symbol의 ID를 설정할 수 있다. BASE로 설정하면 기본 Symbol Set이 사용된다.
-
DFHMDI, DFHMDF의 PS 항목이 설정되어 있을 경우 적용 우선순위가 가장 낮다.
-
-
SOSI
-
필드에 1Byte 문자와 2Byte 문자가 섞여 나타날 수 있음을 표시한다.
-
DFHMDI, DFHMDF의 SOSI 항목이 설정되어 있을 경우 적용 우선순위가 가장 낮다.
-
-
TRANSP
-
맵 셋에 속한 모든 필드의 배경을 투명하게 할 것인지 불투명하게 할 것인지 설정한다.
-
-
TYPE
-
다음의 옵션들 중 하나를 지정할 수 있다.
옵션 내용 MAP
맵 셋 정의의 시작을 의미한다.
DSECT
맵 셋 정의의 시작을 의미한다.
FINAL
맵 셋 정의의 끝을 의미한다. FINAL로 설정될 경우 다른 추가 속성을 지정할 수 없다.
-
맵 셋 정의의 시작을 알리는 옵션(MAP, DSECT)은 공백을 허용하며 현재는 옵션값에 상관없이 동일하게 동작한다.
-