MAP示例
MAP文件
LOSMATT DFHMSD TYPE=MAP, X
MODE=INOUT, X
TIOAPFX=YES, X
TERM=3270-2, X
LANG=C, X
MAPATTS=(COLOR,HILIGHT), X
DSATTS=(COLOR,HILIGHT), X
STORAGE=AUTO, X
CTRL=(FREEKB,FRSET)
*
LOSATT DFHMDI SIZE=(24,80), X
LINE=1, X
COLUMN=1
*
LSSTDII DFHMDF POS=(1,01), X
LENGTH=04, X
COLOR=BLUE, X
INITIAL='MQCM', X
ATTRB=PROT
*
DFHMDF POS=(24,01), X
LENGTH=79, X
COLOR=BLUE, X
ATTRB=ASKIP, X
INITIAL='PF7- 8- 9- 10- X
11- 12-CANCEL'
*
DFHMSD TYPE=FINAL
END
JCL脚本
下面的JCL脚本将MAP(IBMUSER.CICSP(LOSMATT))转化为
- Symbol Map(IBMUSER.PROJ(LOSMATT))
- Physical Map(IBMUSER.RUNLIB.LOAD(LOSMATT))。
//MAPJCL JOB MSGCLASS=X,CLASS=A,MSGLEVEL=(1,1),NOTIFY=&SYSUID //STEP1 EXEC DFHMAPS //COPY.SYSUT1 DD DSN=IBMUSER.CICSP(LOSMATT),DISP=SHR //LINKMAP.SYSLMOD DD DSN=IBMUSER.RUNLIB.LOAD(LOSMATT),DISP=SHR //ASMDSECT.SYSPUNCH DD DSN=IBMUSER.PROJ(LOSMATT),DISP=SHR
上面的脚本调用了编目过程DFH320.CICS.ADFHPROC(DFHMAPS)。需要对该过程进行适当的修改。
INDEX='DFH320.CICS'
MAPLIB='DFH320.CICS.SDFHLOAD'
DSCTLIB='DFH320.CICS.SDFHMAC'
运行该JCL脚本后,Physical Map将存在IIMUSER.RUNLIB.LOAD(LOSMATT)中, 需将其复制到CICS的LOAD路径下,本例中为CEE.SCEECICS。参见本节11.1。
一个需要注意的问题是,上面脚本产生的symbolic map的编码问题。 默认情况下上面的脚本产生的C文件的编码是IBM-1047。 在编译的时候,如果其他的文件使用的编码不是IBM-1047(例如IBM-1388),需要在该文件的开始位置加入
??=pragma filetag("IBM-1047")
或者用下面的JCL转化
//CONVERT JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//GO EXEC PGM=IEFBR14
//ALLOC DD DSN=IBMUSER.PROJ(LOS),DISP=SHR,
// UNIT=3390,VOL=SER=Z9USR1,SPACE=(100,50),
// DCB=(LRECL=80,RECFM=FB,BLKSIZE=100)
//ICONV EXEC PROC=EDCICONV,
// INFILE='IBMUSER.PROJ(MAP)',
// OUTFILE='IBMUSER.PROJ(LOS)',
// FROMC='IBM-1047',
// TOC='IBM-1388'
过程CEE.SCEEPROC(EDCICONV)必须预先定义输出文件(OUTFILE)。因此,需要预先DD ALLOC。关于EDCICONV的更详细的要求,可以参见参考资料[2]。
CICS资源定义
编译后,需要在CICS中定义Mapset。 定义后,可以在C程序中EXEC CICS SEND MAP ("losatt") MAPSET ("losmatt"); 或者在cics中CECI SEND MAP ('LOSATT') MAPSET ('LOSMATT'),注意不能用双引号。
备注:如果修改了MAP,需要刷新MAP才能生效:CEMT SET PROG(MAPNAME) NEW
C代码
下面的代码简述了在CICS中输出map的方法
??=pragma filetag("IBM-1388")
void main() {
long int RespCode;
EXEC CICS ADDRESS EIB(dfheiptr) RESP(RespCode);
if(RespCode != DFHRESP(NORMAL)){
}
EXEC CICS ADDRESS TWA(pTWA) RESP(RespCode);
if(RespCode != DFHRESP(NORMAL)){
}
EXEC CICS SEND MAP ('LOSATT') MAPSET ('LOSMATT') RESP(RespCode);
EXEC CICS RETURN;
}