DAT2330 - Harold Smith Class - Thu Feb 10, 2000 Strategy for handling complex JCL specifications: - specifications for JCL aren't always in the best order to write JCL (e.g. sometimes it says at the top of the specification to delete a tape "when you are done", i.e. at job end) - Strategy: cross out every clause in the job specification as you add it to the JCL. You're done when no un-crossed-out lines remain! Today: MVS JCL Example 3 CBL step is given, but not the DDname for the source program. - can't look in the PROC to find out - DDname is in the compiler, not in the PROC - running the compiler will generate an error message to tell us, if we were wrong Can typerun=scan on the JOB card detect an invalid DDname? - no, since it doesn't run the programs DDnames are coded inside the programs (PGM=) we run - DDnames connect the programs to the world - the programs don't know the names of the files (datasets), only the DDnames. We code JCL to connect the program DDnames to dataset names (or to spool queues). Need to modify LINK step of PROC - bring in a different library - we have our own routines we want to use - we are *replacing* the COBOL link library - (not SYS1.LINKLIB, which is actually executables, not object) - linker expects library on DDname SYSLIB - show diagram of CLG process (Figure 3.5, p.44) - show where link editor expects to add subroutine libraries - this SYSLIB DDname for the link editor is specified in the PROC - you can to *over-ride* the given SYSLIB - not adding a *new* DDname, we are *changing* an existing one - we lose access to original library Missing DDname for INVC output - PROC does not have it - typerun=scan will not discover it - need to look at the code; but, we weren't given it - read the instream source //coboltst job 9999,'my name',class=e, - would prefer not to run in this slow class - may be behind a long-running job // msgclass=a, - this is the JES message class - note that this installation has no TSO spool queue! // msglevel=(1,1),prty=14, - find out which version of JES to determine actual top priority // typerun=scan - in a long-wait queue, scanning is a good idea - but we won't detect the IDUNNO DSname until run time //clg exec proc=cobolclg - DD statements must follow order given in the catalogued PROC //cbl.sysin dd * ...cobol source program goes here... /* //link.syslib dsn=team1.modlib,disp=(shr,keep) - DCB (almost) never required for an input dataset - labels only required for non-std labels - unit and vol required to *find* a volume - we assume it was catalogued, since we weren't told where it was - we want to share this library, not exclusively lock it - SHR: read only, shared with others, no modifications //go.tstout dd dsn=testout,disp=(new,pass), // unit=dasd, - shop says "DASD" is the way to specify disks - no need for vol=ser to force use of particular volume - VOL=SER= almost never done for disk datasets // blksize=4000,recfm=fb, - 4000 is closest multiple of lrecl 100 below 4k - parameters specified in the program must not appear in JCL - no need to say "DCB="; dcb parameters were promoted to real parameters - always specify RECFM when you specify BLKSIZE - FB means fixed length records (typical of COBOL), blocking used // space=(4000,(125,5)) - may want unfragmented, reserved space (fast processing) - may want to conserve space and fragment disk (slower processing) - never use tracks or cylinders, too hardware dependent - first specify the block size (must match program block size) - next, specify number of blocks and extents - go back to question and examine space needs - 5000 records of 100 bytes each = 500,000 byte output dataset - we already coded (above) that our BLKSIZE=4000 - 500,000 divided by 4000 = 125 blocks needed - must specify secondary space extents - controls fragmentation - pick a few blocks for "overflow" extents - you need to know your application to pick this well - other dd parameters this week are for printing //go.idunno dd sysout=(c,,invc), - we weren't given the DDname for this output; we have to guess - sysout is always the spool queue - special forms is third parameter - commas are needed! (three positional parameters) - not in textbook? // outlim=2100 - limit number of output lines (in case of runaway job!) - OUTLIM= is used for programs being tested, not production jobs - the spool queue class may also have an output lines limit //go.tstmsg dd sysout=a,dest=(mvs1.smithh) - no queue for TSO; this is another way to do TSO screen output - user doesn't have to come looking for the output in the queue - use parentheses and a period for this DD syntax //go.tstin dd dsn=atb.testdata,disp=(old,keep) - catalogued dataset is easy to specify! - no need for DCB or UNIT or VOL=SER= //verdisk exec pgm=idcams //sysprint dd sysout=a,hold=yes - this installation has no class to hold output - another way to hold output is HOLD=YES - might be y or might be yes //out dd sysout=l,flash=data,burst=yes - laser printer spool queue - flash the "DATA" form behind the text being printed - separate the pages at the perforations //in dd dsn=testout,disp=(old,catlg) - passed dataset is easy to specify! - no need for DCB or UNIT or VOL=SER= //sysin dd * repro infile(in) outfile(out) /* //