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更新程序。

results matching ""

    No results matching ""