Compiling and Linking on Mainframe

This section contains sample JCL for compiling and linking functions written in COBOL, Assembler, and C. You can also find the sample JCL files in the Enrichment installation.

The following contains the sample JCL necessary to compile and link a COBOL user-written function.

//*jobcard
//**********************************************************************
//**UFUNCCOB: Compile and link-edit a COBOL user function
//**          
//**Customization instructions:
//** 1. Add a jobcard.
//** 2. Change NORMCOB to the member name of your user function.
//** 3. Change source_pds to the dataset name of the source code.
//** 4. Change loadmod_pds to the dataset name of the load module.
//**********************************************************************
//COB2UCL PROC MEM=''
//*   PROC FOR COBOL COMPILE, LINK
//COB2, EXEC  PGM=IGYCRCTL,PARM='RES,RENT',REGION=1400K
//SYSPRINT DD  SYSOUT=A
//SYSLIN, DD  DSNAME=&&LOADSET,UNIT=SYSDA,DISP=(MOD,PASS),
//             SPACE=(TRK,(3,3)),DCB=(BLKSIZE=80,LRECL=80,RECFM=FB)
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT2   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT3   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT4   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT5   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT6   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT7   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSIN    DD  DISP=SHR,DSNAME=source_pds(&MEM)
//LKED, EXEC  PGM=IEWL,PARM='RENT,LIST,XREF,LET,MAP',COND=(5,LT,COB2),
//            REGION=512K
//SYSLIN   DD  DISP=(OLD,DELETE),DSNAME=&&LOADSET
//         DD  DDNAME=SYSIN
//SYSLMOD  DD  DSNAME=loadmod_pds(&MEM),
//             DISP=SHR,DCB=(BLKSIZE=3072)
//SYSLIB   DD  DISP=SHR,DSN=CEE.SCEELKED
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSPRINT DD  SYSOUT=A
//        PEND  END OF COB2UCL PROC
//*
//STEP1  EXEC COB2UCL,MEM='NORMCOB' 

The following contains the sample JCL necessary to compile and link an Assembler user-written function.

//*jobcard
//**UFUNCASM: Compile and link-edit an assembler user function ****
//**          
//**Customization instructions:
//** 1. Add a jobcard.
//** 2. Change XNAUF to the member name of your user function.
//** Note:  Enrichment distributes two samples: NORMASM and EXTASM.
//**    Source can be found in installhlq.STREAMW.FUNCTION.
//** 3. Change object_pds to the dataset name of an object library.
//** 4. Change source_pds to the dataset name of the source code.
//** 5. Change loadmod_pds to the dataset name of the load library.
//**********************************************************************
//ASM1,  EXEC PGM=ASMA90,PARM='NODECK,OBJECT,TERM',
//  REGION=6M,COND=(5,LE)//SYSPRINT  DD  SYSOUT=*
//SYSPUNCH  DD  SYSOUT=*
//SYSTERM   DD  SYSOUT=*
//SYSIN     DD  DISP=SHR,DSN=source_pds.ASM(XNAUF)
//SYSLIB    DD  DSN=SYS1.MACLIB,DISP=SHR
//SYSUT1    DD  UNIT=VIO,SPACE=(CYL,(10,5)),DSN=&SYSUT1
//SYSLIN    DD  DISP=OLD,DSN=object_pds(XNAUF)
//*
//LINK1  EXEC  PGM=HEWLKED,REGION=512K,COND=(5,LE),
// PARM=('LET,XREF,LIST,MAP,NORENT,REUS,AMODE=24,RMODE=24')
//SYSPRINT  DD  SYSOUT=*
//SYSLIN    DD  DISP=OLD,DSN=object_pds(XNAUF)
//OBJECT    DD  DISP=OLD,DSN=object_pds
//SYSLIB    DD  DISP=SHR,DSN=loadmod_pds
//SYSLMOD   DD  DSN=loadmod_pds(XNAUF),
//         DISP=SHR,DCB=(BLKSIZE=3072)
//SYSUT1    DD  DISP=NEW,UNIT=SYSDA,SPACE=(CYL,(2,2))
//*

The following contains the sample JCL necessary to compile and link a C user-written function.

//*jobcard
//**********************************************************************
//**UFUNCC: Compile and link-edit a C user function.
//**Customization instructions:
//** 1. Add a jobcard.
//** 2. Change the STEPLIB to include the dataset name of your
//**    C runtime library, if necessary.
//** 3. Change NORMC to the member name of your user function.
//** 4. Change object_pds to the name of an object library dataset.
//** 5. Change source_pds to the name of a source code dataset.
//** 6. Change loadmod_pds to the name of a load library dataset.
//**********************************************************************
//COMPILE EXEC PGM=CCNDRVR,REGION=96M,
//    PARM='OPTFILE(DD:CCOPT)'
//STEPLIB   DD DISP=SHR,DSN=CEE.SCEERUN
//          DD DISP=SHR,DSN=CBC.SCCNCMP
//SYSMSGS   DD DUMMY,DSN=CBC.SCBC3MSG(EDCMSGE),DISP=SHR
//SYSXMSGS  DD DUMMY,DSN=CBC.SCBC3MSG(CBCMSGE),DISP=SHR
//SYSIN     DD DSN=source_pds(NORMC),DISP=SHR
//SYSLIN    DD DSN=object_pds(NORMC),DISP=OLD
//SYSUT10   DD SYSOUT=*
//SYSPRINT  DD SYSOUT=*
//SYSCPRT   DD SYSOUT=*
//CCOPT     DD *
  SEARCH(//'CEE.SCEEH.+',//'CBC.SCLBH.+')
  LIST
  SOURCE
  NOLONG
  NOMAR
  NOSEQ
  NOOE
  TARGET(LE)
//SYSUT1   DD  UNIT=VIO,SPACE=(32000,(30,30)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//SYSUT4   DD  UNIT=VIO,SPACE=(32000,(30,30)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//SYSUT5   DD  UNIT=VIO,SPACE=(32000,(30,30)),
//             DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT6   DD  UNIT=VIO,SPACE=(32000,(30,30)),
//             DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT7   DD  UNIT=VIO,SPACE=(32000,(30,30)),
//             DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT8   DD    DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT9   DD  UNIT=VIO,SPACE=(32000,(30,30)),
//             DCB=(RECFM=VB,LRECL=137,BLKSIZE=882)
//SYSUT10  DD  SYSOUT=*
//SYSUT14  DD  UNIT=VIO,SPACE=(32000,(30,30)),
//             DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT15  DD  SYSOUT=*
//*
//*-------------------------------------------------------------
//* PRE-LINKEDIT STEP:
//*-------------------------------------------------------------
//PLKED   EXEC PGM=EDCPRLK,PARM='MAP,NOER',COND=(4,LT,COMPILE),
//  REGION=64M
//STEPLIB  DD  DSN=CEE.SCEERUN,DISP=SHR
//SYSMSGS  DD  DSN=CEE.SCEEMSGP(EDCPMSGE),DISP=SHR
//SYSLIB   DD  DSN=CEE.SCEECPP,DISP=SHR
//SYSIN    DD  DSN=object_pds(NORMC),DISP=SHR
//         DD  DSN=CBC.SCLBSID(IOSTREAM),DISP=SHR
//         DD  DSN=CBC.SCLBSID(COMPLEX),DISP=SHR
//         DD  DSN=CBC.SCLBSID(ASCCOLL),DISP=SHR
//SYSMOD   DD  DSN=&&PLKSET,UNIT=VIO,DISP=(NEW,PASS),
//             SPACE=(32000,(30,30)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//SYSOUT   DD   SYSOUT=*
//SYSPRINT DD   SYSOUT=*
//SYSIN2   DD  DUMMY
//*
//****************************************************************
//* LINK
//****************************************************************
//LINK   EXEC  PGM=IEWL,COND=((4,LT,COMPILE),(4,LT,PLKED)),
//    REGION=32M,PARM='AMODE=31,MAP,RENT'
//SYSPRINT DD  SYSOUT=*
//OBJECT   DD  DISP=SHR,DSN=object_pds
//SYSLIB   DD  DISP=SHR,DSN=CEE.SCEELKED
//SYSLMOD  DD  DSN=loadmod_pds(NORMC),
//             DISP=SHR,DCB=(BLKSIZE=3072)
//SYSUT1   DD  DISP=NEW,UNIT=SYSDA,SPACE=(CYL,(2,2))
//SYSLIN   DD  *
 INCLUDE OBJECT(NORMC)
/*