Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/jcl/jcl.rt
1808 views
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=&QUOTE.ABC   DEF&QUOTE
//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'';')
!