LINK调用程序
本节将描述一个简单的CICS程序例子。 该例子的功能是在登录CICS后输入交易码(本例中为LOGN),显示“Hello World”的逆序。
主要内容有
- CICS程序的编写
- LINK调用程序
- 编译用的CLIST,CICS交易、程序的定义和更新等。
C代码
/*LOGN*/
??=pragma filetag("IBM-1388")
struct TWA{
int len;
char msg[1024];
} ;
void main(){
long int RespCode;
char msg[]="Hello World";
char err_e[]="GET EIB E";
char err_t[]="GET TWA E";
struct TWA * pTWA;
EXEC CICS ADDRESS EIB(dfheiptr) RESP(RespCode);
if(RespCode != DFHRESP(NORMAL)){
EXEC CICS RETURN;
}
EXEC CICS ADDRESS TWA(pTWA) RESP(RespCode);
if(RespCode != DFHRESP(NORMAL)) {
EXEC CICS RETURN;
}
pTWA->len=strlen(msg);
strcpy(pTWA->msg,msg);
EXEC CICS LINK PROGRAM ("FUNC ") RESP(RespCode);
EXEC CICS RETURN;
}
/*FUNC*/
??=pragma filetag("IBM-1388")
struct TWA {
int len;
char msg[1024];
};
void main() {
long int RespCode;
struct TWA * pTWA;
int i;
EXEC CICS ADDRESS EIB(dfheiptr) RESP(RespCode);
if(RespCode != DFHRESP(NORMAL)){
}
EXEC CICS ADDRESS TWA(pTWA) RESP(RespCode);
if(RespCode != DFHRESP(NORMAL)){
}
for(i=0;i<=pTWA->len/2;i++)
{
char t=pTWA->msg[i];
pTWA->msg[i]=pTWA->msg[pTWA->len-i-1];
pTWA->msg[pTWA->len-i-1]=t;
}
EXEC CICS SEND FROM(pTWA->msg) LENGTH(pTWA->len);
EXEC CICS RETURN;
}
上面的代码中,LINK程序的时候使用了TWA(Transaction work area)传递数据。 TWA在交易调用时初始化为0,在整个交易范围内有效,交易中的各个程序都可以访问。 TWA的大小由交易资源定义(transaction resource definition)的TWASIZE确定。 CICS Resource Definition Guide中有详细介绍。另外,COMMAREA也用于在程序中传递数据。
使用CLIST编译绑定程序
PROC 0
ISREDIT MACRO (PARM)
ISREDIT (DSNAME) = DATASET
ISREDIT (MNAME) = MEMBER
ISREDIT SAVE
WRITE &DSNAME
WRITE &MNAME
SET A=&SUBSTR(8:8,&SYSTIME)
SET SP=&SUBSTR(3:4,AA )
WRITE &SYSDATE
WRITE &SYSUID
SUBMIT * END($$)
//CCICS JOB CLASS=A,
// MSGCLASS=A,NOTIFY=&SYSUID
//*compile and link a NON XPLINK CCICS Program
//COMP EXEC DFHYITDL,REGION=75M,
// PROGLIB=IBMUSER.RUNLIB.LOAD(&MNAME),
// CPARM='RENT,SOURCE,LIST,LONGNAME,LOCALE("ZH_CN.IBM-1388")',
// LNKPARM='LIST,MAP,LET,XREF'
//TRN.SYSIN DD DSN=&DSNAME(&MNAME),DISP=SHR
//LKED.SYSIN DD *
NAME &MNAME(R)
/*
//CPYLOAD EXEC PGM=IEBCOPY,PARM='SIZE=1M'
//SYSPRINT DD SYSOUT=*
//IN1 DD DISP=SHR,DSN=IBMUSER.RUNLIB.LOAD
//OUT1 DD DISP=SHR,DSN=CEE.SCEECICS
//SYSIN DD *
&SP.COPY I=IN1,O=OUT1
&SP. S MEMBER=((&MNAME,,R))
/*
$$
可以将上述CLIST脚本拷贝到USER.CLIST中
定义CICS交易
在CICS中使用CEDA定义程序和交易。在定义交易的时候,一定要注意设置合适的TWASIZE
程序修改后需要使用CEMT更新程序。