NOTE regression tests for the jcl command UNIT jcl TEST 'basics' EXEC -nvw -m- <<'!' //TEST JOB TEST job comment //SET1 SET A=123,B=456,C=789 default values //STEP1 EXEC PGM=IEBGENER exec comment //SYSIN DD TEST.&A..&B..&C..TEST, dd comment // LRECL=80 continuation comment //STEP2 EXEC PGM=IEFBR14 pgm comment //SYSIN DD * here //* comment comment //STEP3 EXEC PGM=TEST pgm comment ! EXEC -nvw -m- <<'!' //NNNNNNNN JOB '#BOZO',CLASS=C, // MSGCLASS=8,REGION=4096K //MMMMMMMM EXEC PGM=TEST //SYSIN DD DSN=IN, // DISP=SHR * XXX XXX XXXX //SYSOUT DD DSN=FOO$OUT, // DISP=(NEW,CATLG), * YYYYYYYY // DCB=(RECFM=FB,BLKSIZE=0,LRECL=74),UNIT=(DISK,16) //TEMP1 DD DSN=FOO$TMP, // DISP=(NEW,CATLG) * ZZZZZZZZ //TEMP2 DD DSN='BAR TMP', // DISP=(MOD,CATLG) * ZZZZZZZZ //SYSERR DD DSNAME=ERR ! EXEC -nvw -m- <<'!' //NNNNNNNN JOB '#BOZO',CLASS=C, // MSGCLASS=8,REGION=4096K //MMMMMMMM EXEC PGM=TEST //SYSIN DD DSN=IN, // DISP=SHR * XXX XXX XXXX //OUTPUT DD DSN=OUT, // DISP=(MOD,CATLG), * YYYYYYYY // DCB=(RECFM=FB,BLKSIZE=0,LRECL=74),UNIT=(DISK,16) //SYSERR DD DSNAME=ERR ! TEST 'continuation' EXEC -nvw -m- <<'!' //TEST JOB //S1 EXEC PGM=TEST //D1 DD DSNAME=SWITCH.LEVEL18.GROUP12,UNIT=3350, // VOLUME=335023,SPACE=(TRK,(80,15)),DISP=(,PASS) //D2 DD DSNAME=INDS,DISP=OLD,CHKPT=EOV, MY INPUT DATA SET // UNIT=SYSSQ,VOLUME=SER=(TAPE01,TAPE02,TAPE03) //S2 EXEC PGM=BILLING,COND.PAID=((20,LT),EVEN), // COND.LATE=(60,GT,FIND), // COND.BILL=((20,GE),(30,LT,CHGE)) THIS STATEMENT CALLS X // THE BILLING PROCEDURE AND SPECIFIES RETURN CODE TESTS X // FOR THREE PROCEDURE STEPS //* 10 20 30 40 50 60 70 //*45678901234567890123456789012345678901234567890123456789012345678901234567890 //S3 EXEC PGM=IEFBR14,PARM='THIS IS A LONG PARAMETER WITHIN APOST // ROPHES, CONTINUED IN COLUMN 16 OF THE NEXT RECORD' ! EXEC -nvw -m- <<'!' //TEST JOB //* 10 20 30 40 50 60 70 //*45678901234567890123456789012345678901234567890123456789012345678901234567890 // SET AAA= XXXXXXXX YYYYYYY # // SET BBB=bbb XXXXXXXX YYYYYYY # // SET CCC=ccc XXXXXXXX YYYYYYY # // SET DDD=ddd XXXXXXXX YYYYYYY # // SET EEE=eee XXXXXXXX YYYYYYY # // EXEC PGM=ECHO,PARM=&AAA.&BBB.&CCC.&DDD.&EEE. ! TEST 'quoting' EXEC -nvw -m- <<'!' //* TEST //TEST PROC A=,B='',C='''''c''''',D='o''''k',E=O''''''K //STEP EXEC PGM=TEST //SYSIN DD ':A=&A:B=&B:C=&C:D=&D:E=&E:&&A:&&Z:' ! EXEC -nvw -m- <<'!' //TEST JOB //STEP EXEC PGM=TEST,PARM=('FILE=AAA,LIST=Y,,EMPTY') ! EXEC -nvw -m- <<'!' //ABC JOB // SET VAR=value //PDQ EXEC PGM=XYZ,COND=(4,LT), // PARM=('$SKIP=-1,VAR=&VAR') ! TEST 'PROC variable scope' EXEC -nvw -m- <<'!' //EXAMPLE PROC SYM1='What''''s up, Doc?',SYM2=(DEF),SYM3=&&&&TEMP1, // SYM4='&&TEMP2',SYM5=&&TEMP3,TEMP3=TEMPNAME, // SYM6=&TEMP3 //S1 EXEC PGM=WTO,PARM='&SYM1',ACCT=&SYM2 //DD1 DD DSN=&SYM3,UNIT=SYSDA,SPACE=(TRK,(1,1)) //DD2 DD DSN=&SYM4,UNIT=SYSDA,SPACE=(TRK,(1,1)) //DD3 DD DSN=&SYM5,UNIT=SYSDA,SPACE=(TRK,(1,1)) //DD4 DD DSN=&SYM6,UNIT=SYSDA,SPACE=(TRK,(1,1)) // PEND ! EXEC -nvw -m- <<'!' //TEST01 JOB TEST //SET01 SET A=A0,B=B0 //* //STEP01 EXEC PGM=TEST01 //SYSIN DD TEST.&A..&B..&C..TEST01 //* //PROC1 PROC A=A1,C=C1 //STEP11 EXEC PROC=PROC2,A=A2,B=B2 //STEP12 EXEC PGM=TEST12 //SYSIN DD TEST.&A..&B..&C..TEST12 // PEND //* //PROC2 PROC //STEP21 EXEC PGM=TEST21 //SYSIN DD TEST.&A..&B..&C..TEST21 // PEND //* //STEP02 EXEC PROC=PROC1,A=,C=C4 //* //STEP03 EXEC PGM=TEST03 //SYSIN DD TEST.&A..&B..&C..TEST02 //* ! TEST 'references' EXEC -nvw -m- <<'!' //JOB1 JOB TEST //STEPA EXEC PGM=TEST //DD1 DD DSNAME=REPORT //DD2 DD DSN=TABLE //DD3 DD DSNAME=*.DD1 ! EXEC -nvw -m- REF=X <<'!' //JOB5 JOB TEST //AHA EXEC PGM=TEST,PARM=AHA //PROC1 PROC N=1 //PSTEP1 EXEC PGM=TEST,PARM=01 //DS1 DD DSNAME=DATA1 //PSTEP2 EXEC PGM=TEST,PARM=02 //DS2 DD DSNAME=DATA2 // PEND //CALLER EXEC PROC=PROC1 //REF1 DD DSNAME=&REF..CALLER.PSTEP2.DS2 //NEXT EXEC PGM=TEST,PARM=03 //REF2 DD DSNAME=&REF..CALLER.PSTEP1.DS1 ! EXEC -nvw -m- REF='*' EXEC -nvw -m- <<'!' //JOB2 JOB TEST //STEP1 EXEC PGM=TEST //DDA DD DSNAME=D58.POK.PUBS01 //STEP2 EXEC PGM=TEST //DDB DD DSNAME=*.STEP1.DDA ! TEST 'nested procedure calls' EXEC -nvw -m- <<'!' //JOB1 JOB NEST,TEST //C PROC //CS1 EXEC PGM=GHI // PEND //B PROC //BS1 EXEC PROC=C //BS2 EXEC PGM=DEF // PEND //A PROC //AS1 EXEC PROC=B //AS2 EXEC PGM=ABC // PEND //STEP1 EXEC PROC=A //STEP2 EXEC PGM=JKL ! EXEC -nvw -m- <<'!' //JOBA JOB ... //INSTREAM PROC LOC=POK //PSTEP EXEC PGM=WRITER //DSA DD SYSOUT=A,DEST=&LOC // PEND //CALLER EXEC INSTREAM,LOC=NYC ! EXEC -nvw -m- <<'!' //JOBB JOB ... //INSTREAM PROC LOC=POK,NUMBER=3350 //PSTEP EXEC PGM=TEST //PIN DD DSNAME=REPORT,DISP=(OLD,KEEP),UNIT=&NUMBER //POUT DD SYSOUT=A,DEST=&LOC // PEND //CALLER EXEC PROC=INSTREAM,NUMBER=,LOC=STL //PSTEP.INDATA DD * (data) /* ! EXEC -nvw -m- <<'!' //TEST JOB //TESTJCL PROC //STEP1 EXEC TESTJCL1 // PEND //TESTJCL1 PROC //STEP2 EXEC PGM=IEFBR14,PARM=&PVAL //SYSUDUMP DD SYSOUT=A // PEND //RUNIT EXEC TESTJCL,PVAL=EXEC0 ! TEST 'DD override' EXEC -nvw -m- <<'!' //JOB1 JOB //* Procedure C: //C PROC //CS1 EXEC PGM=CCC //CS1DD1 DD DSNAME=A.B.C,DISP=SHR //CS1DD2 DD SYSOUT=A // PEND //* Procedure B: //B PROC //BS1 EXEC PROC=C //CS1.CS1DD1 DD DSNAME=X.Y.Z This statement is a valid //* override of procedure C, stepCS1 //* for DD CS1DD1 //* //CS1.CS1DD3 DD SYSOUT=A This statement is a valid //* addition to procedure C, step CS1 //BS2 EXEC PGM=BBB //BS2DD1 DD DSNAME=E,DISP=SHR // PEND //* Procedure A: //A PROC //AS1 EXEC PROC=B //BS2.BS2DD2 DD DSNAME=G,DISP=SHR This statement is a valid //* addition to procedure B, step BS2 //AS2 EXEC PGM=AAA //AS2DD1 DD DSNAME=E,DISP=SHR // PEND //* Job Stream: //STEP1 EXEC PROC=A //AS2.AS2DD2 DD DSNAME=G,DISP=SHR This statement is a valid //* addition to procedure A, step AS2 //STEP2 EXEC PGM=IEFBR14 ! EXEC -nvw -m- <<'!' //JOB1 JOB //CS1 EXEC PGM=CCC //CS1DD1 DD DSNAME=X.Y.Z,DISP=SHR //* //CS1DD2 DD SYSOUT=A //CS1DD3 DD SYSOUT=A //* //BS2 EXEC PGM=BBB //BS2DD1 DD DSNAME=E,DISP=SHR //BS2DD2 DD DSNAME=G,DISP=SHR //* //AS2 EXEC PGM=AAA //AS2DD1 DD DSNAME=E,DISP=SHR //AS2DD2 DD DSNAME=G,DISP=SHR //STEP2 EXEC PGM=IEFBR14 ! EXEC -nvw -m- <<'!' //TEST JOB VER=0 //SUB PROC VER=1 //S1 EXEC PGM=TEST //S1D1 DD DSN=O1.&VER..DAT //S1D2 DD DSN=O2.&VER..DAT // PEND //MAIN1 EXEC PROC=SUB //S1.S1D1 DD DSN=N1.&VER..DAT //S1.S1D3 DD DSN=N3.&VER..DAT ! EXEC -nvw -m- <<'!' //TEST JOB //SUB PROC VER=1 //S1 EXEC PGM=TEST //S1D1 DD DSN=O1.&VER..DAT //S1D2 DD DSN=O2.&VER..DAT // PEND //MAIN1 EXEC PROC=SUB //S1.S1D1 DD DSN=N1.&VER..DAT //S1.S1D3 DD DSN=N3.&VER..DAT ! TEST 'syntax' EXEC -nvw -m- <<'!' //TEST JOB BAD //SET1 SET VAL1='ABC,',VAL2=DEF,NULLSYM='' //S1 EXEC PGM=IEFBR14,PARM=&VAL1 // TIME=30 //S2 EXEC PGM=IEFBR14,PARM=&VAL2 // TIME=60 //S3 EXEC PGM=IEFBR14,PARM=&VAL1 // &NULLSYM ! EXEC -nvw -m- <<'!' //TEST JOB // SET QUOTE='''' //S1 EXEC PGM=IEFBR14,PARM="E.ABC DEF"E //DD1 DD DUMMY ! EXEC -nvw -m- <<'!' //TEST JOB NOPARM // SET CONT=' ',T='(30,0)' //S1 EXEC PGM=IEFBR14&CONT.PARM='ABC DEF',TIME=&T ! EXEC -nvw -m- <<'!' //TEST JOB PARM // SET CONT=',',T='(30,0)' //S1 EXEC PGM=IEFBR14&CONT.PARM='ABC DEF',TIME=&T ! EXEC -nvw -m- <<'!' //TEST JOB PARM //TPROC PROC //STEP1 EXEC PGM=IEFBR14,PARM=&INPUT&XXX // PEND //STEP2 EXEC PROC=TPROC,XXX=VALUE ! TEST 'substitution subterfuge' EXEC -nvw -m- <<'!' //TEST JOB //TESTPROC PROC A=IMB406,B=ABLE,C=3330,D=WXYZ1, // E=OLD,F=TRK,G='10,10,1' //STEP EXEC PGM=&A //DD1 DD DSNAME=&B,UNIT=&C,VOLUME=SER=&D,DISP=&E, // SPACE=(&F,(&G)) // PEND //CALLER1 EXEC PROC=TESTPROC,A=IEFBR14,B=BAKER,E=(NEW,KEEP) //CALLER2 EXEC PROC=TESTPROC,A=IEFBR14,B=,C=3350,D=,E= ! TEST 'path prefix maps' DATA t.map <<'!' map *.*.CCC.DDD HIT- ! EXEC -r -m- -m t.map AAA.BBB.CCC.DDD02 P.D.CCC.DDD ..CCC.DDD.1 A.B.C.D DATA t.map <<'!' set %%CYCLE=123 map *.*.CCC.DDD HIT-${%%CYCLE}.${JCL_AUTO_CYCLE} ! EXEC -r -m- -m t.map AAA.BBB.CCC.DDD02 P.D.CCC.DDD ..CCC.DDD.1 A.B.C.D EXEC -r -m- -m t.map %%CYCLE=789 AAA.BBB.CCC.DDD02 P.D.CCC.DDD ..CCC.DDD.1 A.B.C.D EXPORT JCL_AUTO_CYCLE=789 EXEC -r -m- -m t.map AAA.BBB.CCC.DDD02 P.D.CCC.DDD ..CCC.DDD.1 A.B.C.D EXEC -i -r -m- -m t.map AAA.BBB.CCC.DDD02 P.D.CCC.DDD ..CCC.DDD.1 A.B.C.D DATA t.map <<'!' set --import set %%CYCLE=123 map *.*.CCC.DDD HIT-${%%CYCLE}.${JCL_AUTO_CYCLE} ! EXEC -r -m- -m t.map AAA.BBB.CCC.DDD02 P.D.CCC.DDD ..CCC.DDD.1 A.B.C.D DATA t.map <<'!' map A.B.C abc map A.B ab %2 map A a %1 map "" x ! EXEC -nvw -m- -m t.map <<'!' //TEST JOB MAP TEST //S1 EXEC PGM=IEFBR14 //S1D1 DD A.B.C.Z abc.Z //S1D2 DD A.B.Z ab.Z //S1D3 DD A.C.Z a.C.Z //S1D4 DD A.Z a.Z //S1D5 DD Z Z //S1D6 DD A.Z a.Z //S1D7 DD A.C.Z a.C.Z //S1D8 DD A.B.Z ab.Z //S1D9 DD A.B.C.Z abc.Z ! DATA t.map <<'!' map A.B.C abc map A.B ab %2 map A a %1 map * /dev/null ! EXEC -nvw -m- -m t.map EXEC -nvw -m- -k <<'!' //TEST JOB TEST //S1 EXEC PGM=IEFBR14 //S1D1 DD DSN=A.B.C,DCB=(RECFM=FB,LRECL=123) //S1D2 DD DSN=A.B.Q,DISP=(NEW,CATLG,CATLG),DCB=(RECFM=FB,LRECL=6001) //S2 EXEC PGM=IEFBR14 //S2D1 DD DSN=A.B.C ! EXEC -nvw -m- -k -m t.map DATA k.map <<'!' set --marklength map A.B.C abc map A.B ab %2 map A a %1 map "" x ! EXEC -nvw -m- -m k.map EXEC -nvw -m- -m k.map --nomarklength DATA q.map <<'!' set --marklength map A.B.Q abq .qz map A.B.C abc %3.qz map A.B ab %2 map A a %1 map "" x ! EXEC -nvw -m- -m q.map DATA q.map <<'!' set --marklength map A.B.Q abq .qz map A.B.C abc %v3.qz map A.B ab %v2 map A a %v1 map "" x ! EXEC -nvw -m- -m q.map DATA q.map <<'!' set --marklength map A.B.Q abq .qz map A.B.C abc.qz %3 map A.B ab %2 map A a %1 map "" x ! EXEC -nvw -m- -m q.map DATA q.map <<'!' set --marklength map A.B.Q abq .qz map A.B.C abc.qz %v3 map A.B ab %v2 map A a %v1 map "" x ! EXEC -nvw -m- -m q.map DATA q.map <<'!' set --marklength suf .qz map A.B.Q abq .qz map A.B.C abc.qz %3 map A.B ab %2 map A a %1 map "" x ! EXEC -nvw -m- -m q.map DATA q.map <<'!' set --marklength suf .qz map A.B.Q abq .qz map A.B.C abc.qz %v3 map A.B ab %v2 map A a %v1 map "" x ! EXEC -nvw -m- -m q.map EXEC -nvw -m- -k -m t.map <<'!' //TEST JOB TEST //SORT1 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=COPY /* //SORTIN DD DSN=A.B.C,DCB=(RECFM=FB,LRECL=62) // DD DSN=A.B.C.X // DD DSN=A.B.C.Y //SORTOUT DD DSN=A.B.C.Z,DCB=(*.SORTIN) ! EXEC -nvw -m- -m k.map EXEC -nvw -m- -k -m t.map <<'!' //TEST JOB TEST //SORT1 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=COPY /* //SORTIN DD DUMMY,DSN=A.B.C,DCB=(RECFM=FB,LRECL=62) // DD DSN=A.B.C.X // DD DSN=A.B.C.Y //SORTOUT DD DSN=A.B.C.Z,DCB=(*.SORTIN) ! EXEC -nvw -m- -m k.map DATA m.map <<'!' map DFUB1IW.TPHR212.C040609. ${TESTROOT}/@data1/C040609/ ! EXEC -nvw -m- -m m.map <<'!' //TEST JOB MAP TEST //S1 EXEC PGM=IEFBR14 //S1D1 DD DFUB1IW.TPHR212.C040609.XIVAI01.FIIP1800 abc.Z ! DATA n.map <<'!' map DFUB1IW.TPHR212.C040609 ${TESTROOT}/@data1/C040609' //TEST JOB MAP TEST //S1 EXEC PGM=IEFBR14 //S1D1 DD DFUB1IW.TPHR212.C040609.XIVAI01.FIIP1800 abc.Z ! EXEC -nvw -m- -m n.map DATA p.map <<'!' set --marklength map A.B.C abc .qz map *.E.F ${1}/E/F %321 map *.*.I ${2}/${1}.I map "" x ! EXEC -nvw -m- -m p.map <<'!' //TEST JOB TEST //TEST1 EXEC PGM=TEST //TESTIN DD DSN=A.B.C,DCB=(RECFM=FB,LRECL=62) // DD DSN=A.B.C.X,DCB=(RECFM=VB,LRECL=123) // DD DSN=D.E.F.Y // DD DSN=G.H.I.Z ! DATA v.map <<'!' set --marklength map *.*.*.*.X. /X/${1}/${2}/${3}/${4}/ map *.*.*.*.Y /Y/${1}/${2}/${3}/${4} map *.*.*.*.* /5/${1}/${2}/${3}/${4}/${5} map *.*.*.* /4/${1}/${2}/${3}/${4} map *.*.* /3/${1}/${2}/${3} map *.* /2/${1}/${2} map * /1/${1} ! EXEC -nvw -m- -m v.map <<'!' //TEST JOB TEST //TEST1 EXEC PGM=TEST //TESTIN DD DSN=A.B.C.D.X.F // DD DSN=A.B.C.D.Y.F // DD DSN=A.B.C.D.E.F.G // DD DSN=A.B.C.D.E.F // DD DSN=A.B.C.D.E // DD DSN=A.B.C.D // DD DSN=A.B.C // DD DSN=A.B // DD DSN=A ! DATA v.map <<'!' set --marklength export ROOT=/root set DATA=${ROOT}/data map *.*.*.*.XXXXXXX ${DATA}/${3}/${4}.XXXXXXX %789.qz map *.*.*.*.YYYYYYY ${DATA}/${3}/${4}.YYYYYYY %v1234.qz map *.*.QQQQQQQ.*.* ${DATA}/QQQQQQQ/${4}.${3} map *.*.RRRRRRR.*.SSSSSSS ${DATA}/SSSSSSS/${3}/${2}/${1} map *.*.ERROR.* ${DATA}/SSSSSSS/${4} map *.*.*.*.* ${DATA}/${3}/${4}.${5} ! EXEC -nvw -m- -m v.map <<'!' //TEST JOB TEST //TEST1 EXEC PGM=TEST //TESTIN DD DSN=AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.XXXXXXX // DD DSN=AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.YYYYYYY // DD DSN=AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.ZZZZZZZ // DD DSN=AAAAAAA.BBBBBBB.RRRRRRR.FFFFFFF.SSSSSSS // DD DSN=AAAAAAA.BBBBBBB.ERROR.FFFFFFF.SSSSSSS // DD DSN=AAAAAAA.BBBBBBB.QQQQQQQ.DDDDDDD.EEEEEEE ! DATA v.map <<'!' set --marklength set ROOT=/root set DATA=${ROOT}/data map *.*.*.*.XXXXXXX ${DATA}/${3}/${4}.XXXXXXX %789.qz map *.*.*.*.YYYYYYY ${DATA}/${3}/${4}.YYYYYYY %v1234.qz map *.*.QQQQQQQ.*.* ${DATA}/QQQQQQQ/${4}.${3} map *.*.RRRRRRR.*.SSSSSSS ${DATA}/SSSSSSS/${3}/${2}/${1} map *.*.ERROR.* ${DATA}/SSSSSSS/${4} map *.*.*.*.* ${DATA}/${3}/${4}.${5} ! EXEC -nvw -m- -m v.map EXEC -r -m- -m v.map \ AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.XXXXXXX \ AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.YYYYYYY \ AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.ZZZZZZZ \ AAAAAAA.BBBBBBB.RRRRRRR.FFFFFFF.SSSSSSS \ AAAAAAA.BBBBBBB.ERROR.FFFFFFF.SSSSSSS \ AAAAAAA.BBBBBBB.QQQQQQQ.DDDDDDD.EEEEEEE DATA e.map <<'!' set --marklength map XXXXXXX xxxxxxx map XXXXXXX.* yyyyyyy/${1} map XXXXXXX.*.* yyyyyyy/${1}/${2} map *.*.*.*.XXXXXXX ${3}/XXXXXXX map *.*.*.*.XXXXXXX.* ${3}/YYYYYYY/${5} map *.*.*.*.XXXXXXX.*.* ${3}/YYYYYYY/${5}/${6} map *.*.XXXXXXX.*.YYYYYYY ${3}/YYYYYYY map *.*.XXXXXXX.*.ZZZZZZZ ${3}/ZZZZZZZ ! EXEC -nvw -m- -m e.map < /dev/null DATA a.map <<'!' map *.BBBBBBB.* dir/${1}/${2} map *.ZZZZZZZ/* pds/${1}/${2} ! EXEC -nvw -m- -m a.map <<'!' //TEST JOB TEST //TEST1 EXEC PGM=TEST //TESTIN DD DSN=AAAAAAA.BBBBBBB.CCCCCCC // DD DSN=AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.XXXXXXX // DD DSN=AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.YYYYYYY // DD DSN=AAAAAAA.BBBBBBB.CCCCCCC.DDDDDDD.ZZZZZZZ // DD DSN=AAAAAAA.BBBBBBB.RRRRRRR.FFFFFFF.SSSSSSS // DD DSN=AAAAAAA.BBBBBBB.ERROR.FFFFFFF.SSSSSSS // DD DSN=AAAAAAA.BBBBBBB.QQQQQQQ.DDDDDDD.EEEEEEE // DD DSN=AAAAAAA.ZZZZZZZ(CCCCCCC) // DD DSN=AAAAAAA.ZZZZZZZ(CCCCCCC.DDDDDDD.XXXXXXX) // DD DSN=AAAAAAA.ZZZZZZZ(CCCCCCC.DDDDDDD.YYYYYYY) // DD DSN=AAAAAAA.ZZZZZZZ(CCCCCCC.DDDDDDD.ZZZZZZZ) // DD DSN=AAAAAAA.ZZZZZZZ(RRRRRRR.FFFFFFF.SSSSSSS) // DD DSN=AAAAAAA.ZZZZZZZ(ERROR.FFFFFFF.SSSSSSS) // DD DSN=AAAAAAA.ZZZZZZZ(QQQQQQQ.DDDDDDD.EEEEEEE) ! TEST 'syntax round II' EXEC -nvw -m- -k <<'!' //TEST JOB TEST //SORT1 EXEC PGM=SORT //SYSIN DD * SORT FIELDS=COPY ! EXEC -nvw -m- -k <<'!' //TEST JOB TEST //STEP01 EXEC PGM=HAL9000 //HAL_IN DD DSN=A.B.C.D // DD DSN=A.B.C.E ! EXEC -nvw -m- -k <<'!' //TEST JOB TEST //STEP01 EXEC PGM=HAL9000 //HAL.IN DD DSN=A.B.C.D // DD DSN=A.B.C.E ! TEST 'IF/ELSE/ENDIF' EXEC -nvw -m- -k <<'!' //TEST JOB TEST // SET ?RC?=2 // IF (RC LT 4) THEN // EXEC PGM=ECHO,PARM=TRUE-1 // ELSE // EXEC PGM=ECHO,PARM=FALSE-1 // ENDIF // IF (RC < 4) THEN // EXEC PGM=ECHO,PARM=TRUE-2 // ELSE // EXEC PGM=ECHO,PARM=FALSE-2 // ENDIF // SET ?RC?=16 // IF (RC LT 4) THEN // EXEC PGM=ECHO,PARM=TRUE-3 // ELSE // EXEC PGM=ECHO,PARM=FALSE-3 // ENDIF // IF (RC < 4) THEN // EXEC PGM=ECHO,PARM=TRUE-4 // ELSE // EXEC PGM=ECHO,PARM=FALSE-4 // ENDIF // SET ?RC?=2 // IF (RC LT 4 | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-5 // ELSE // EXEC PGM=ECHO,PARM=FALSE-5 // ENDIF // IF (RC < 4 | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-6 // ELSE // EXEC PGM=ECHO,PARM=FALSE-6 // ENDIF // SET ?RC?=16 // IF (RC LT 4 | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-7 // ELSE // EXEC PGM=ECHO,PARM=FALSE-7 // ENDIF // IF (RC < 4 | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-8 // ELSE // EXEC PGM=ECHO,PARM=FALSE-8 // ENDIF // SET ?RC?=2 // IF (RC LT 4 | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-9 // ELSE // EXEC PGM=ECHO,PARM=FALSE-9 // ENDIF // IF ((RC LT 4 & RC LT 12) | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-10 // ELSE // EXEC PGM=ECHO,PARM=FALSE-10 // ENDIF // SET ?RC?=16 // IF (RC LT 4 | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-11 // ELSE // EXEC PGM=ECHO,PARM=FALSE-11 // ENDIF // IF ((RC LT 4 & RC LT 12) | RC = 16) THEN // EXEC PGM=ECHO,PARM=TRUE-12 // ELSE // EXEC PGM=ECHO,PARM=FALSE-12 // ENDIF ! EXEC -nvw -m- -k <<'!' //TEST JOB TEST // SET ?ABEND?=1 //STEP1 EXEC PGM=TRUE // IF (ABEND | STEP1.RC > 8) THEN // EXEC PGM=ECHO,PARM=TRUE-1 // ENDIF // IF (ABEND OR STEP1.RC GT 8) THEN // EXEC PGM=ECHO,PARM=TRUE-2 // ENDIF // SET ?RC?=6 // IF (RC > 4 & RC < 8) THEN // EXEC PGM=ECHO,PARM=TRUE-3 // ENDIF // IF (RC GT 4 AND RC LT 8) THEN // EXEC PGM=ECHO,PARM=TRUE-4 // ENDIF ! EXEC -nvw -m- -k <<'!' //TEST JOB TEST // SET ?ABEND?=0 //STEP1 EXEC PGM=TRUE // IF (ABEND | STEP1.RC > 8) THEN // EXEC PGM=ECHO,PARM=TRUE-1 // ENDIF // IF (ABEND OR STEP1.RC GT 8) THEN // EXEC PGM=ECHO,PARM=TRUE-2 // ENDIF // SET ?RC?=2 // IF (RC > 4 & RC < 8) THEN // EXEC PGM=ECHO,PARM=TRUE-3 // ENDIF // IF (RC GT 4 AND RC LT 8) THEN // EXEC PGM=ECHO,PARM=TRUE-4 // ENDIF ! EXEC -nvw -m- -k <<'!' //JOBA JOB TEST //STEP1 EXEC PGM=BEFORE //IFBAD IF (ABEND | STEP1.RC > 8) THEN //TRUE EXEC PGM=ERROR //IFBADEND ENDIF //NEXTSTEP EXEC PGM=AFTER ! EXEC -nvw -m- -k <<'!' //JOBA JOB TEST //STEP1 EXEC PGM=BEFORE //IFBAD IF (!ABEND & STEP1.RC < 8) THEN //TRUE EXEC PGM=OK //IFBADEND ENDIF //NEXTSTEP EXEC PGM=AFTER ! EXEC -nvw -m- -k <<'!' //JOBA JOB TEST //STEP1 EXEC PGM=BEFORE //IFBAD IF (ABEND | STEP1.RC > 8) THEN //TRUE EXEC PGM=ERROR // ELSE //IFBADEND ENDIF //NEXTSTEP EXEC PGM=AFTER ! EXEC -nvw -m- -k <<'!' //JOBA JOB TEST //STEP1 EXEC PGM=BEFORE //IFBAD IF (!ABEND & STEP1.RC < 8) THEN //TRUE EXEC PGM=OK // ELSE //IFBADEND ENDIF //NEXTSTEP EXEC PGM=AFTER ! EXEC -nvw -m- -k <<'!' //JOBA JOB TEST //STEP1 EXEC PGM=BEFORE //IFBAD IF (ABEND | STEP1.RC > 8) THEN //TRUE EXEC PGM=ERROR // ELSE //YES EXEC PGM=TRUE //IFBADEND ENDIF //NEXTSTEP EXEC PGM=AFTER ! EXEC -nvw -m- -k <<'!' //JOBA JOB TEST //STEP1 EXEC PGM=BEFORE //IFBAD IF (!ABEND & STEP1.RC < 8) THEN //TRUE EXEC PGM=OK // ELSE // EXEC PGM=TRUE //IFBADEND ENDIF //NEXTSTEP EXEC PGM=AFTER ! EXEC -nvw -m- -k RC=3 <<'!' //TEST JOB TEST // SET ?RC?=&RC // EXEC PGM=ECHO,PARM=1 // IF (RC > 5) THEN // IF (RC > 7) THEN // EXEC PGM=ECHO,PARM=2 // ELSE // EXEC PGM=ECHO,PARM=3 // ENDIF // ELSE // IF (RC > 3) THEN // EXEC PGM=ECHO,PARM=4 // ELSE // EXEC PGM=ECHO,PARM=5 // ENDIF // ENDIF // EXEC PGM=ECHO,PARM=(E,O,F) ! EXEC -nvw -m- -k RC=5 EXEC -nvw -m- -k RC=7 EXEC -nvw -m- -k RC=9 TEST 'INCLUDE' DATA include.jcl <<'!' //SYSOUT2 DD DSN=A ! EXEC -nvw -m- <<'!' //TEST JOB TEST //LIBSRCH JCLLIB ORDER=TEST.SYSOUT.JCL //STEP1 EXEC PGM=OUTRTN //OUTPUT1 INCLUDE MEMBER=include.jcl //STEP2 EXEC PGM=IEFBR14 ! DATA include.jcl <<'!' //SYSOUT2 DD DSN=A ! EXEC -nvw -m- <<'!' //TEST JOB TEST //LIBSRCH JCLLIB ORDER=(TEST.SYSOUT.JCL,MY.JCL.NOT.YOURS) //STEP1 EXEC PGM=OUTRTN //OUTPUT1 INCLUDE MEMBER=include.jcl //STEP2 EXEC PGM=IEFBR14 ! TEST 'DD' EXEC -nvw -m- <<'!' //SPACY PROC SYM1='What''''s up, Doc?',SYM2=(DEF),SYM3=&&&&TEMP1, // SYM4='&&TEMP2',SYM5=TEMP3, // SYM6=TEMP4 //S1 EXEC PGM=WTO,PARM='&SYM1',ACCT=&SYM2 //DD1 DD DSN=&SYM3,UNIT=SYSDA, // SPACE=(TRK,(1,,1),2),DISP=(NEW,KEEP) //DD2 DD DSN=&SYM4,UNIT=SYSDA, // SPACE=(TRK,(1,,1),2),DISP=(OLD,DELETE) //DD3 DD DSN=&SYM5,UNIT=SYSDA, // SPACE=(TRK,(1,,1),2),DISP=MOD //DD4 DD DSN=&SYM6,UNIT=SYSDA, // SPACE=(TRK,(1,,1),2),DISP=NEW // PEND ! TEST 'OUTPUT' EXEC -nvw -m- <<'!' //TESTOUT PROC OUTTEST //OUT1 OUTPUT DEST=STLNODE.WMSMITH //OUT2 OUTPUT CONTROL=DOUBLE //TEST EXEC PGM=TEST //DS DD SYSOUT=C,OUTPUT=(*.OUT1,*.OUT2) ! EXEC -nsvw -m- TEST 'delayed references' EXEC -nvw -m- <<'!' //JOB1 JOB TEST //STEPA EXEC PGM=TEST //DD1 DD DSNAME=REPORT //DD2 DD DSN=TABLE //DD3 DD DSNAME=*.DD1 //DD4 DD DDNAME=DD1 ! EXEC -nvw -m- <<'!' //JOB1 JOB TEST //STEP1 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD DDNAME=INPUT //INPUT DD DSN=TSTDATA1,DISP=SHR // DD DSN=TSTDATA2,DISP=SHR //SYSUT2 DD SYSOUT=* //SYSIN DD DUMMY ! EXEC -nvw -m- <<'!' //JOB1 JOB TEST //TPROC PROC //S1 EXEC PGM=PROG1 //DD1 DD DDNAME=INPUT //DD2 DD DSN=MYDSN2,DISP=SHR //DD3 DD DSN=MYDSN3,DISP=SHR //S2 EXEC PGM=PROG2 //DDA DD DDNAME=INPUT //DDB DD DSN=MINE2,DISP=SHR //DDC DD DSN=MINE3,DISP=SHR // PEND //STEP1 EXEC TPROC //INPUT DD DSN=MYDSN1,DISP=SHR // DD DSN=MYDSN4,DISP=SHR //S2.INPUT DD DSN=MINE1,DISP=SHR // DD DSN=MINE4,DISP=SHR ! EXEC -nvw -m- <<'!' //JOB1 JOB TEST //TPROC PROC //S1 EXEC PGM=PROG1 //DD1 DD DDNAME=INPUT //DD2 DD DSN=MYDSN2,DISP=SHR //DD3 DD DSN=MYDSN3,DISP=SHR //S2 EXEC PGM=PROG2 //DDA DD SUBSYS=(BLSR,'DDNAME=INPUT') //DDB DD DSN=MINE2,DISP=SHR //DDC DD DSN=MINE3,DISP=SHR // PEND //STEP1 EXEC TPROC //INPUT DD DSN=MYDSN1,DISP=SHR // DD DSN=MYDSN4,DISP=SHR //S2.INPUT DD DSN=MINE1,DISP=SHR // DD DSN=MINE4,DISP=SHR ! TEST 'control-m auto edit expansion' EXEC -d4 -n -m- -O 1998-06-03 <<'!' //EJ%%ODATE JOB (0,15) // EXEC PGM=ACCOUNTS,DAY=%%ODAY,MONTH=%%OMONTH ! EXEC -d4 -n -m- <<'!' //J1 JOB TEST //* %%SET %%A = 1 //* %%SET %%B = 2 //* %%SET %%A2 = 100 //P1 EXEC PGM=P1,A=%%A,B=%%B,AB=%%A%%B,A.B=%%A.%%B ! EXEC -d4 -n -m- -O 2000-09-24 <<'!' //J1 JOB TEST //S1 EXEC PGM=T1,$OYEAR=%%$OYEAR,OYEAR=%%OYEAR, // OMONTH=%%OMONTH,ODAY=%%ODAY,OWDAY=%%OWDAY //* %%SET %%BACKUP_UNIT = TAPE //F1 DD %%BACKUP_UNIT //* %%SET %%BACKUP_UNIT_%%OWDAY = EE%%OMONTH.%%ODAY //F2 DD %%BACKUP_UNIT_%%OWDAY //F3 DD %%BACKUP_UNIT_7 ! TEST 'parsalyze this' EXEC -nvw -m- <<'!' //TEST JOB (0,15) //TEST01 EXEC PGM=TEST02,PARM=('(12345,'' '',''TEST03'',FOO BAR)') //TEST04 EXEC PGM=TEST05,PARM=('FOO = ''BAR'';') !