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)
/*