MAP是形成基于CICS程序的界面的一个实体,主要由BMS(Basic Mapping Support)提供支持。MAP存放于MAPSET中,一个MAPSET可以存放一到多个MAP。不过通常情况下,一个MAPSET中仅存放一个MAP。因此,有时也可使用MAP指代其所在的MAPSET。
同时,MAP实际上是分为两种类型的。其中一种类型为物理MAP,另一种类型为符号MAP。理解MAP的基本概念,关键是要理解这两种类型MAP的区别与联系。物理MAP主要用于在屏幕上显示界面信息。其中BMS使用物理MAP既进行输入操作,也进行输出操作。例如,假设CICS中的某一MAP如图所示。
假设该MAP的名称为“TESTMA”,所存放的MAPSET的名称为“MAPSETA”。则该MAP所对应的源代码如下:
MAPSETA DFHMSD TYPE=&SYSPARM, MODE=INOUT, TERM=ALL,
LANG=COBOL, TIOAPFX=YES, CTRL=(FREEKB)
TESTMA DFHMDI SIZE=(24, 80), LINE=1, COLUMN=1
DFHMDF POS=(1, 1), LENGTH=4, INITIAL=’TSMP’, ATTRB=ASKIP
DFHMDF POS=(2, 30), LENGTH=12, INITIAL=’TEST SYSTEM’, ATTRB=ASKIP
DFHMDF POS=(4, 2), LENGTH=12, INITIAL=’TEST CODE:’, ATTRB=ASKIP
CODE DFHMDF POS=(4, 15), LENGTH=10, ATTRB=(UNPROT, NUM, IC)
DFHMDF POS=(4, 26), LENGTH=1, ATTRB=PROT
DFHMDF POS=(5, 2), LENGTH=10, INITIAL=’TEST NAME:’, ATTRB=ASKIP
NAME DFHMDF POS=(5, 13), LENGTH=20, ATTRB=UNPROT
DFHMDF POS=(5, 34), LENGTH=1, ATTRB=PROT
MSG DFHMDF POS=(24, 1), LENGTH=75, ATTRB=ASKIP
DFHMSD TYPE=FINAL
END
以上这段代码实际上为一段汇编宏代码。其物理MAP所包含内容的汇编宏指令分别如下。
q DFHMSD:指定MAPSET。
q DFHMDI:指定MAP。
q DFHMDF:指定物理MAP中的常量和变量。其中每行前面有标号的对应MAP中的变量,没有标号的对应MAP中的常量。常量仅用于输出,其属性和内容不可改变。变量既可用于输出,也可用于输入,其属性和内容可以改变。
q DFHMSD:表明该MAP定义结束。
符号MAP为一组COBOL数据,用于在COBOL程序中进行处理。例如,对于以上定义的MAP,可在COBOL程序中使用“COPY MAPSETA”将符号MAP拷贝进来。该命令被编译后,将得到如下符号MAP:
COPY MAPSETA.
01 TESTMAI. /*以下为符号MAP中的输入信息*/
02 FILLER PIC X(12). /*此处表示TIOA(Terminal Input/Output Area)前缀*/
02 CODEL COMP PIC S9(4). /*以下为变量CODE的相关输入信息*/
02 CODEF PICTURE X.
02 FILLER REDEFINES CODEF.
03 CODEA PICTURE X.
02 CODEI PIC X(10).
02 NAMEL COMP PIC S9(4). /*以下为变量NAME的相关输入信息*/
02 NAMEF PICTURE X.
02 FILLER REDEFINES NAMEF.
03 NAMEA PICTURE X.
02 NAMEI PIC X(20).
02 MSGL COMP PIC S9(4). /*以下为变量MSG的相关输入信息*/
02 MSGF PICTURE X.
02 FILLER REDEFINES MSGF.
03 MSGA PICTURE X.
02 MSGI PIC X(75).
01 TESTMAO REDEFINES TESTMAI. /*以下为符号MAP中的输出信息*/
02 FILLER PIC X(12).
02 FILLER PICTURE X(3).
02 CODEO PIC X(10).
02 FILLER PICTURE X(3).
02 NAMEO PIC X(20).
02 FILLER PICUTRE X(3).
02 MSGO PIC X(75).
关于符号MAP中各变量的后缀,简要说明如下:
q 后缀“L”:半字边界区域,用于保存输入数据的长度。(关于半字的概念,将在大型机汇编语言扩展一章中详细讲解。)
q 后缀“F”:当遇到EOF(Erase to end of Field key)情况时,该区域内容为十六进制数“80”。此时后缀为“L”的区域内容将为0。
q 后缀“I”:保存实际输入的数据。
q 后缀“A”:包含数据的属性,可以对其进行更改;其中常用属性有:DFHBMUNP(可输入);DFHBMPRO(不可输入);DFHBMBRY(高亮显示);DFHBMDAR(不显示)。
q 后缀“O”:保存实际要输出的数据。
最后,图分别反映了物理MAP和符号MAP从定义到生成的实际过程。