zOs/JCL/REOJCL

$#@
$= fun    = r          $** Funktion
                       $**   r = reorgs ausführen
                       $**   p = nur Preview der Reorgs
                       $**   i = nur IEFBR14 statt reorg st
                       $**   d = distribute test libs
$= mbr    = QBLOB00    $** MemberPrefix (7 stellig) für listdef und lctl
$= dbSys = DP4G        $** db2 subsystem
$= rz     = RZ4        $** rz qualifier in DSNs


$= job    = QREOJCL4 $** jobname
$= tstOut = 1
if \ $tstOut & $fun \== 'd' then $@[
    $= lctl   = $dbSys.DBAA.LCTL
    $= lstdef = $dbSys.DBAA.LISTDEF
    $= rexx   = TSO.$rz.P0.USER.EXEC
$] else $@[
    $= tstPre =- userid()'.TSTREO'
    $= lctl   =  $tstPre.LISTDEF
    $= lstdef =  $tstPre.LISTDEF
    $= rexx   = TSO.$rz.P0.USER.EXEC
    $= rexx   =- userid()'.WK.REXX'
$]
$= sysTempl = $dbSys.DBAA.LISTDEF(TEMPL)
if $fun == 'd' then $@[           $** do real reorgs
    $= pr =- userid()'.TSTREO'
    say 'copying' $pr'/* to' $rz
    call csmCopy $pr'.LISTDEF', $rz'/'$pr'.LISTDEF'
    call csmCopy $pr'.SYSPRINT', $rz'/'$pr'.SYSPRINT'
    call csmCopy $pr'.REOOUT', $rz'/'$pr'.REOOUT'
    return
$] else if $fun == 'r' then $@[           $** do real reorgs
    $=txt = reorg TS und IX
    $=reoPgm   = DSNUTILB
$] else if $fun == 'p' then $@[   $** do no reorgs only preview|
    $=txt = preview only TS und IX reorgs
    $=reoPgm   = DSNUTILB
$] else if $fun == 'i' then $@[   $** do no reorgs only preview|
    $=txt = iefBr14, no reorgs for TS und IX
    $=reoPgm   = IEFBR14
$] else
    call err 'bad fun' $fun
$;
$>. fEdit() $@=/job/
//$job JOB (PD00,KE30,,SS00000000), 'DB2 REORG',
//             MSGCLASS=T,TIME=1440,CLASS=M1,SCHENV=DB2ALL,
//             NOTIFY=&SYSUID
//****** QR Reorg job from reoJcl *************************************
//*         fun    = $fun ==> $txt
//*         job    = $job
//*         mbr    = $mbr*
//*         dbSys = $dbSys
//*         lctl   = $lctl
//*         lstdef = $lstdef
//*         rexx   = $rexx
//*********************************************************************
$@[ if $tstOut then $@=[
//P00     EXEC PGM=IEFBR14
$] else $@=[
//P00     EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
 DEL 'DSN.SYSPRINT.$job' NVSAM PURGE
 DEL '$lstdef.$job' NVSAM PURGE
 IF MAXCC < 9 THEN SET MAXCC = 0
$] $]
//*
// IF P00.RC = 0 THEN
//* OBJEKTE AUS LISTDEF AUFLÖSEN
//P02     EXEC PGM=DSNUTILB,
//             PARM='$dbSys,$job.PREVIEW'
//STEPLIB   DD DSN=DB2@.$rz.P0.DSNLOAD,DISP=SHR
$@[ if $tstOut then $@=[
//SYSPRINT DD  DISP=SHR,DSN=$tstPre.SYSPRINT($mbr)
$] else $@=[
//SYSPRINT DD  DSN=DSN.SYSPRINT.$job,
//             DISP=(NEW,CATLG)
$] $]
//UTPRINT  DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSTEMPL DD  DISP=SHR,DSN=$sysTempl
//SYSIN    DD  DSN=$lstdef(OPTPREV),DISP=SHR
//         DD  DSN=$lstdef(${mbr}1),DISP=SHR
// ENDIF
//*
// IF RC < 9 THEN
//* SYSPRINT AUF SYSOUT UMKOPIEREN
//P03     EXEC PGM=IEBGENER
//SYSIN     DD DUMMY
//SYSUT1    DD DSN=*.P02.SYSPRINT,DISP=SHR
//SYSUT2    DD SYSOUT=*
// ENDIF
//*
// IF RC < 5 THEN
//* RTS FÜR TABLESPACES CHECKEN, OUTPUT ERSTELLEN
//P04     EXEC PGM=IKJEFT01,
//             DYNAMNBR=20
//SYSEXEC  DD  DSN=$rexx,DISP=SHR
//DDIN1     DD DSN=*.P02.SYSPRINT,DISP=SHR
//DDIN2    DD  DSN=$lstdef(${mbr}1),DISP=SHR
$@[if $tstOut then $@=[
//DDOUT1   DD  DISP=SHR,DSN=$tstPre.REOOUT(${mbr}T)
$] else $@=[
//DDOUT1   DD  DSN=$lstdef.$job,
//             DISP=(MOD,CATLG,CATLG),
//             MGMTCLAS=COM#E005,
//             RECFM=FB,LRECL=80
$] $]
//SYSTSIN  DD  *
  %CHECKRTS $dbSys TS
//SYSIN    DD  DUMMY
//SYSTSPRT DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*,RECFM=F,LRECL=132
//SYSUDUMP DD  SYSOUT=*
//PLIDUMP  DD  SYSOUT=*
// ENDIF
//*
// IF RC < 5 THEN
//* REORG FÜR TABLESPACES AUSFÜHREN
//P05     EXEC PGM=$reoPgm,
//             PARM='$dbSys,$job.REORG'
//STEPLIB  DD  DSN=DB2@.$rz.P0.DSNLOAD,DISP=SHR
//SYSPRINT DD  SYSOUT=*
//UTPRINT  DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSTEMPL DD  DISP=SHR,DSN=$sysTempl
$=sysD = SYSIN
$@ if $fun \== 'r' then $@=[
//$sysD    DD  DSN=$lstdef(OPTPREV),DISP=SHR
$=sysD = $'     '
$]
//$sysD    DD  DISP=SHR,DSN=*.P04.DDOUT1
// ENDIF
//*
// IF RC < 5 THEN
//* RTS FÜR INDEXE CHECKEN, OUTPUT ERSTELLEN
//P06     EXEC PGM=IKJEFT01,
//             DYNAMNBR=20
//SYSEXEC  DD  DSN=$rexx,DISP=SHR
//DDIN1    DD DSN=*.P02.SYSPRINT,DISP=SHR
//DDIN2    DD  DSN=$lstdef(${mbr}1),DISP=SHR
$@[if $tstOut then $@=[
//DDOUT1   DD  DISP=SHR,DSN=$tstPre.REOOUT(${mbr}I)
$] else $@=[
//DDOUT1   DD  DSN=$lstdef.$job,
//             DISP=(MOD,CATLG,CATLG),
//             MGMTCLAS=COM#E005,
//             RECFM=FB,LRECL=80
$] $]
//SYSTSIN  DD  *
  %CHECKRTS $dbSys IX
//SYSIN    DD  DUMMY
//SYSTSPRT DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*,RECFM=F,LRECL=132
//SYSUDUMP DD  SYSOUT=*
//PLIDUMP  DD  SYSOUT=*
// ENDIF
//*
// IF RC < 5 THEN
//* REORG FÜR INDEXE AUSFÜHREN
//P07     EXEC PGM=$reoPgm,
//             PARM='$dbSys,$job.REORG'
//STEPLIB  DD  DSN=DB2@.$rz.P0.DSNLOAD,DISP=SHR
//SYSPRINT DD  SYSOUT=*
//UTPRINT  DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSTEMPL DD  DISP=SHR,DSN=$sysTempl
$=sysD = SYSIN
$@ if $fun \== 'r' then $@=[
//$sysD    DD  DSN=$lstdef(OPTPREV),DISP=SHR
$=sysD = $'     '
$]
//$sysD    DD  DISP=SHR,DSN=*.P06.DDOUT1
// ENDIF
//*
// IF ((ABEND) OR (P05.RC GT 4) OR (P07.RC GT 4)) THEN
//* TERM UTIL
//P08     EXEC PGM=IKJEFT01
//SYSTSPRT  DD SYSOUT=*
//SYSPRINT  DD SYSOUT=*
//SYSTSIN   DD DSN=$lctl(${mbr}2),DISP=SHR
//* DISPLAY DATABASE
//*
//P09     EXEC PGM=IKJEFT01
//SYSTSPRT  DD SYSOUT=*
//SYSPRINT  DD SYSOUT=*
//SYSTSIN   DD DSN=$lctl(${mbr}3),DISP=SHR
// ENDIF
$/job/