Closed mainframed closed 8 months ago
I agree, it pretty much looks as if there is an unwanted character in the procedure:
14 ++SYSUT2 DD DISP=(NEW,CATLG),
++ DSN=SYSGEN.ISPF.&DSN,
++ DCB=SYS1.MACLIB,
15 ++ SPACE=(CYL,(2,0,20),RLSE),
16 ++ UNIT=SYSDA,
17 ++ VOL=SER=PUB001
As you can see the SPACE parameter is treated as a separate statement which it isn’t.
If you go into 3.8 scroll down to the DCB=SYS1.MACLIB and run a HEX ON command you should see if the is a spurious character, maybe a new-line where it shouldn’t.
I suppose you read the PROC from somewhere, can you check if it comes from there? It may well be a BREXX problem, but the code looks ok to us.
Regards
Peter
Hello @mainframed
we have copied your JCL and REXX script to our development system as a test and cannot reproduce the problem. Maybe you could transfer the JCL again from your host system via IND$FILE to the MVS and repeat the test.
However, we will run more tests as well.
The blank lines in your job output are also in the printer output, or do they come from copy&paste?
Best
Mike
000001 //#001JCL JOB (TSO),
000002 // 'Install ISPF',
000003 // CLASS=A,
000004 // MSGCLASS=H,
000005 // MSGLEVEL=(1,1)
000006 //* ----- CLEAN UP -----
000007 //CLEANUP EXEC PGM=IDCAMS
000008 //SYSPRINT DD SYSOUT=*
000009 //SYSIN DD *
000010 DELETE MIG.TEST.ISPF.DOC SCRATCH PURGE
000011 DELETE MIG.TEST.ISPF.LLIB SCRATCH PURGE
000012 DELETE MIG.TEST.ISPF.PLIB SCRATCH PURGE
000013 DELETE MIG.TEST.ISPF.RFEPLIB SCRATCH PURGE
000014 DELETE MIG.TEST.ISPF.MLIB SCRATCH PURGE
000015 DELETE MIG.TEST.ISPF.SLIB SCRATCH PURGE
000016 DELETE MIG.TEST.ISPF.TLIB SCRATCH PURGE
000017 DELETE MIG.TEST.ISPF.CLIB SCRATCH PURGE
000018 SET MAXCC=0
000019 SET LASTCC=0
000020 //*
000021 //* RECV370 Proc
000022 //*
000023 //RECV PROC DSN=LLIB
000024 //* ---- RECEIVE ----
000025 //RECVJCL EXEC PGM=RECV370
000026 //STEPLIB DD DISP=SHR,DSN=SYS2.LINKLIB
000027 //XMITIN DD DSN=MVP.WORK(&DSN),DISP=SHR
000028 //RECVLOG DD SYSOUT=*
000029 //SYSPRINT DD SYSOUT=*
000030 //SYSIN DD DUMMY
000031 //* Work temp dataset
000032 //SYSUT1 DD DSN=&&SYSUT1,
3375 // VOL=SER=PUB001,
000034 // UNIT=3390,
000035 // SPACE=(CYL,(8,4),RLSE),
000036 // DISP=(,DELETE)
000037 //* Output dataset
000038 //SYSUT2 DD DISP=(NEW,CATLG),
000039 // DSN=MIG.TEST.ISPF.&DSN,
000040 // DCB=SYS1.MACLIB,
000041 // SPACE=(CYL,(2,0,20),RLSE),
000042 // UNIT=SYSDA,
3375 // VOL=SER=PUB001
000044 // PEND
000045 //* ***************************
000046 //DOC EXEC RECV,DSN=DOC
000047 //MLIB EXEC RECV,DSN=MLIB
000048 //PLIB EXEC RECV,DSN=PLIB
000049 //RFEPLIB EXEC RECV,DSN=RFEPLIB
000050 //* ---- RECEIVE LOADLIB ----
000051 //RECVLOAD EXEC PGM=RECV370
000052 //STEPLIB DD DISP=SHR,DSN=SYS2.LINKLIB
000053 //XMITIN DD DSN=MVP.WORK(LLIB),DISP=SHR
000054 //RECVLOG DD SYSOUT=*
000055 //SYSPRINT DD SYSOUT=*
000056 //SYSIN DD DUMMY
000057 //* Work temp dataset
000058 //SYSUT1 DD DSN=&&SYSUT1,
3375 // VOL=SER=PUB001,
000060 // UNIT=3390,
000061 // SPACE=(CYL,(8,4),RLSE),
000062 // DISP=(,DELETE)
000063 //* Output dataset
000064 //SYSUT2 DD DISP=(NEW,CATLG),
000065 // DSN=MIG.TEST.ISPF.LLIB,
000066 // SPACE=(CYL,(2,0,20),RLSE),
000067 // UNIT=SYSDA,
3375 // VOL=SER=PUB001,
000069 // DCB=(RECFM=U,BLKSIZE=19069)
000070 //* ***************************
000071 //* Create empty DSNs
000072 //* I'm not sure we need these
000073 //* But they're in the original Wally ISPF
000074 //* And they get allocated in the CLIST provided by Wally
000075 //*
000076 //SYS2EXEC EXEC PGM=IEFBR14
000077 //SLIB DD DSN=MIG.TEST.ISPF.SLIB,DISP=(,CATLG),
3375 // VOL=SER=PUB001,UNIT=SYSDA,SPACE=(CYL,(2,0,20),RLSE)
000079 //SLIB DD DSN=MIG.TEST.ISPF.TLIB,DISP=(,CATLG),
3375 // VOL=SER=PUB001,UNIT=SYSDA,SPACE=(CYL,(2,0,20),RLSE)
000081 //CLIB DD DSN=MIG.TEST.ISPF.CLIB,DISP=(,CATLG),
3375 // VOL=SER=PUB001,UNIT=SYSDA,SPACE=(CYL,(2,0,20),RLSE)
000083 //*
000084 //* Add ISPF CLIST to SYS1.CMDPROC
000085 //*
000086 //CLIST EXEC PGM=IEBGENER
000087 //SYSPRINT DD SYSOUT=*
000088 //SYSIN DD DUMMY
000089 //SYSUT2 DD DSN=SYS1.CMDPROC(ISPF),DISP=SHR
000090 //SYSUT1 DD DATA,DLM=@@
000091 PROC 0
000092 FREE F(ISPCLIB,ISPLLIB,ISPMLIB,ISPPLIB,ISPSLIB,ISPTABL,ISPTLIB)
000093 FREE F(ISPPROF,REVPROF)
000094 /* ALLOCATE REQUIRED ISPF DD NAMES */
000095 ALLOC F(ISPCLIB) DA('MIG.TEST.ISPF.CLIB','MIG.TEST.REVIEW.CLIST') SHR
000096 ALLOC F(ISPLLIB) DA('MIG.TEST.ISPF.LLIB','MIG.TEST.REVIEW.LOAD') SHR
000097 ALLOC F(ISPMLIB) DA('MIG.TEST.ISPF.MLIB') SHR
000098 ALLOC F(ISPPLIB) DA('MIG.TEST.ISPF.PLIB','MIG.TEST.ISPF.RFEPLIB') SHR
000099 ALLOC F(ISPSLIB) DA('MIG.TEST.ISPF.SLIB') SHR
000100 ALLOC F(ISPTABL) DA('MIG.TEST.ISPF.TLIB') SHR
000101 ALLOC F(ISPTLIB) DA('MIG.TEST.ISPF.TLIB') SHR
000102 /* CREATE USERID.ISP.PROF IF IT DOES NOT EXIST */
000103 IF &SYSDSN('&SYSUID..ISP.PROF') NE &STR(OK) THEN DO
000104 /* Create the DCB info */
000105 ATTRIB PROFS BLKSIZE(3120) LRECL(80) DSORG(PO) RECFM(F,B)
000106 /* Allocate the dataset */
000107 ALLOC DSNAME('&SYSUID..ISP.PROF') CYLINDERS SPACE(1,0) DIR(10) +
000108 VOLUME(PUB001) UNIT(3390) USING(PROFS) NEW
000109 /* Free the dcb info */
000110 FREE ATTRLIST(PROFS)
000111 END
000112 /* Allocate user profiles */
000113 ALLOC F(ISPPROF) DA('&SYSUID..ISP.PROF') SHR
000114 ALLOC F(REVPROF) DA('&SYSUID..ISP.PROF') SHR
000115 /* Launch ISPF */
000116 CALL 'MIG.TEST.ISPF.LLIB(ISPF)'
000117 FREE F(ISPCLIB,ISPLLIB,ISPMLIB,ISPPLIB,ISPSLIB,ISPTABL,ISPTLIB)
000118 FREE F(ISPPROF,REVPROF)
000119 @@
000120 //*
000121 //* Apply ISPMAINT
000122 //*
000123 //IMASPZAP EXEC PGM=IMASPZAP,PARM=IGNIDRFULL
000124 //SYSLIB DD DSN=MIG.TEST.ISPF.LLIB,DISP=SHR
000125 //SYSPRINT DD SYSOUT=*
000126 //SYSIN DD *
000127 *
000128 *--------------------*
000129 * UPGRADE VERSION ID *
000130 *--------------------*
000131 *
000132 NAME ISPF ISPVERSN
000133 REP 05 F0F0F0
000134 //*
000135 //* Install ACETEST
000136 //*
000137 //ACEINST EXEC PGM=IEBCOPY
000138 //SYSPRINT DD SYSOUT=*
000139 //ISPLLIB DD DSN=MIG.TEST.ISPF.LLIB,DISP=SHR
000140 //ACEAPF DD DSN=SYS2.LINKLIB,DISP=SHR
000141 //SYSIN DD *
000142 C I=ISPLLIB,O=ACEAPF
000143 S M=ACEABEND
000144 S M=ACEBREAK
000145 S M=ACELMAN
000146 S M=ACETEST
000147 //*
000148 //* Add ACEAUTH to SYS2.PROCLIB and SYS2.PARMLIB
000149 //*
000150 //ACEAUTH EXEC PGM=IEBGENER
000151 //SYSPRINT DD SYSOUT=*
000152 //SYSIN DD DUMMY
000153 //SYSUT2 DD DSN=SYS2.PROCLIB(ACEAUTH),DISP=SHR
000154 //SYSUT1 DD DATA,DLM=@@
000155 //*
000156 //* This proc must be run once after every IPL to activate the APF-
000157 //* Authorized features of ACETEST. If this job is not run, ACETEST
000158 //* will still operate, but in a limited manner.
000159 //*
000160 //* Either use /S ACEAUTH from MVS console or submit a job
000161 //* with //ACEAUTH EXEC ACEAUTH as the only step
000162 //*
000163 //ACETEST EXEC PGM=ACETEST,PARM='ACEAUTH'
000164 //STEPLIB DD DSN=SYS2.LINKLIB,DISP=SHR
000165 //SYSUDUMP DD SYSOUT=*
000166 //ACEAUTH DD DSN=SYS2.PARMLIB(ACEAUTH),DISP=SHR
000167 @@
000168 //ACEAUTH EXEC PGM=IEBGENER
000169 //SYSPRINT DD SYSOUT=*
000170 //SYSIN DD DUMMY
000171 //SYSUT2 DD DSN=SYS2.PARMLIB(ACEAUTH),DISP=SHR
000172 //SYSUT1 DD *
000173 END
000001 /* BREXX #error*/
000002 call submit_error "'MIG.CNTL(#ERROR)'"
000003 SAY "DONE!"
000004 return
000005
000006 submit_error:
000007
000008 parse arg jcl_location
000009 say "submit_XMI_jcl: Processing" jcl_location
000010
000011
000012 "ALLOC FI(XMIJCL) DA("!!jcl_location!!") SHR "
000013 "EXECIO * DISKR XMIJCL (FINIS STEM XMIJCL."
000014
000015 if rc > 0 then do
000016 say "Error reading "!!jcl_location!!":" rc
000017 "FREE F(XMIJCL)"
000018 exit 8
000019 end
000020
000021 "FREE F(XMIJCL)"
000022 if find(XMIJCL.1,'JOB') < 1 then do
000023 say jcl_location !!"is not a valid JOB"
000024 exit 8
000025 end
000026
000027 /* first make sure the queue is empty */
000028 do queued()
000029 pull element
000030 say 'submit_XMI_jcl: previous queue item' element
000031 end
000032
000033 do j=1 to XMIJCL.0
000034
000035 x=0
000036 do while (right(XMIJCL.J,x) == left(" ",x))
000037 /* if we have spaces find the first non space character */
000038 x = x + 1
000039 iterate
000040 end
000041
000042 if right(XMIJCL.J,1) == "," then do
000043 /* if the first line has a continuation, keep going */
000044 queue XMIJCL.J
000045 iterate
000046 end
000047
000048 jcl = LEFT(XMIJCL.J, LENGTH(XMIJCL.J) - (x - 1))!!","
000049 say "submit_XMI_jcl: Changing line" J "to:" jcl
000050 queue jcl
000051
000052 queue "// USER=MIG,PASSWORD="!!MIG
000053
000054 leave
000055 end
000056
000057 if j = XMIJCL.0 then do
000058 say "Unable to PARSE XMI JCL File " jcl_location
000059 exit 8
000060 end
000061
000062 do j = (j+1) to XMIJCL.0
000063 queue XMIJCL.j
000064 end
000065
000066 total = queued()
000067
000068 do x=1 to queued()
000069 pull element
000070 jclstem.x = element
000071 end
000072 jclstem.0 = total
000073
000074 say "submit_XMI_jcl: submitting" jclstem.0 "lines"
000075 call submit('jclstem.')
000076
000077 return
READY
rx #error
submit_XMI_jcl: Processing 'MIG.CNTL(#ERROR)'
submit_XMI_jcl: Changing line 5 to: // MSGLEVEL=(1,1),
submit_XMI_jcl: submitting 174 lines
DONE!
READY
*** Output dataset
14 ++SYSUT2 DD DISP=(NEW,CATLG),
++ DSN=MIG.TEST.ISPF.&DSN,
++ DCB=SYS1.MACLIB,
++ SPACE=(CYL,(2,0,20),RLSE),
++ UNIT=SYSDA,
++ VOL=SER=PUB001
15 //MLIB EXEC RECV,DSN=MLIB
STMT NO. MESSAGE
-
9 IEF653I SUBSTITUTION JCL - DSN=MVP.WORK(DOC),DISP=SHR
14 IEF653I SUBSTITUTION JCL - DSN=MIG.TEST.ISPF.DOC,
19 IEF653I SUBSTITUTION JCL - DSN=MVP.WORK(MLIB),DISP=SHR
24 IEF653I SUBSTITUTION JCL - DSN=MIG.TEST.ISPF.MLIB,
29 IEF653I SUBSTITUTION JCL - DSN=MVP.WORK(PLIB),DISP=SHR
34 IEF653I SUBSTITUTION JCL - DSN=MIG.TEST.ISPF.PLIB,
39 IEF653I SUBSTITUTION JCL - DSN=MVP.WORK(RFEPLIB),DISP=SHR
44 IEF653I SUBSTITUTION JCL - DSN=MIG.TEST.ISPF.RFEPLIB,
We cannot re-create the problem, therefore the issue will be closed. If it re-occur in V2R5M3, please re-open it.
I posted this in Discord but was asked to attach the JCL output and its easier to post here.
In the process of rewriting parts of MVP to support batch i implemented using
submit('*')
andqueue
. I'm not sure why but this JCL https://github.com/MVS-sysgen/SOFTWARE/blob/main/ISPF/%23001JCL.jcl would have artifacts in it preventing it from running. Submitting the JCL as a stem works fine. the code in question: https://github.com/MVS-sysgen/MVP/blob/a52124752297c5dacaac1a0a8c70a81831a396bf/MVP.rexx#L640This only breaks this specific JCL, not any others.
If you replace
with
it causes the following errors:
Here's the output of the JCL when using `submit('jclstem.')