zOs/REXX/TMPLGEN

$#@
$*(    generate and distribute standard templates
    How-To  :
    -----------------------------------------------------------------
    MEMBER  : was?
    -----------------------------------------------------------------
    1.GEN   : wsh zum generieren der LISTDEF member
              (outLib variable prüfen, kann test or produktive sein
    -----------------------------------------------------------------
    2.##DIST: wsh zum verteilen in alle RZs

              Tipp :
              mit dem block-command "qq" kann man z.b. nur ein
              einzelnes RZ verteilen. wsh führt nur den code von "qq"
              bis "qq" aus.
    -----------------------------------------------------------------

    What is generated?
    -----------------------------------------------------------------
    TEMPL (altes) Standard Template
        copy mit 2 Varianten für mgmtClas
            (1) 1 Woche auf Disk ==> für copyArchivierungs Ablauf
            (2) adb#sub1: sofort archiviert (ohne copyArchivierung)
    TEMPL#LO gelöscht
    TEMPL#S  neues System Template mit &SSID..S&PB...
    TEMPL#U  neues User   Template mit &SSID..U&PB...
    XBTEMPL  Elar Template
    XBTEMPL1 Elar Template
    XBTEMPLN Elar Template
    DXTEMPL  Elar für DXB* DBs mit &SSID..U&PB..&DB(2)

 history --------------------------------
 v16 31. 8.16 Anpassung DISP für RECU für Q und PTA (neue VAR $dispRecU)
 v15 21. 6.16 dataclass pro rz fuer recU
 v14 18. 2.15 member mit plexBuchstaben statt rzNr
 v13 18. 2.15 code von templ#lo eliminiert
 v12 12.12.14 rz1 + templ#lo deaktiviert
 v12 25. 8.14 reformat templ#lo durch templ überschrieben
 v11 20. 8.14 reformat
 v10 22. 7.14 erste Version mit gen
$*)

$=outLib = dsn.source.tmpl
$=outLib = A540769.tst.tmpl
$** $proc gTrg $@[ $=trg = $rz/$dbSys.DBAA.LISTDEF  $]
$proc gTrg $@[ $=trg = $rz/A540769.TSTTMPL.$dbSys  $]

$=csDist =- jOpen(file($outLib"(##dist) ::f"), '>')
call jWrite $csDist, $'$#@'
call jWrite $csDist, $'$** wsh script zum Verteilen von templates'
$= storAll = $'STORCLAS (ALL$N)'
$= storFar = $'STORCLAS(FAR$N)'
call iiIni

if 0 then $@[  $** collect all temp from all rz -----------------------
    $do ix=1 while iiIxPut(ix) $@[
        lib = $rz'/'$dbSys'.DBAA.LISTDEF'
        mbId = 'T#'$rzC$dbSysC'#'
        say $rz $dbSys mbrList(qq, lib'(*TEMPL*)') '==>' mbId
        do qx=1 to m.qq.0
            say '  ' qx m.qq.qx
            call dsnCopy lib'('m.qq.qx')',
             , 'A234579.tst.listOrig('repAll(m.qq.qx, 'TEMPL', mbId)')'
            end
        $]
    exit
$] else if 0 then $@[  $** del all old members ------------------------
    $do ix=1 while iiIxPut(ix) $@[
        $@gTrg
        parse value $trg with rz '/' dsn
        call jWrite $csDist, "say '"$rz $dbSys"'"
        call jWrite $csDist, "call dsnDel" rz", '"dsn"(TEMPL#DC)'"
        call jWrite $csDist, "call dsnDel" rz", '"dsn"(TEMPL#LO)'"
        call jWrite $csDist, "call dsnDel" rz", '"dsn"(TEMPL#NI)'"
        $]
$] else $@[   $** generate all templates ------------------------------
$do ix=1 while iiIxPut(ix) $@[
    $= mbId = T#$rzP$dbSysC#
    call jWrite $csDist, "say '"$rz $dbSys $mbId"'"
    $= pbDB = &DB.
    $= uxDB = &DB.
    $= lql  = 3
    if wordPos($dbSys, 'DBOF DBTF DE0G DPXG DPYG DPZG') > 0 then $@[
        $= copyMgmt = COM#A041
    $] else $@[
        $= copyMgmt = SUB#ADB1
    $]
    if wordPos($rz , 'RZ2 RZ4 RQ2') > 0 then $@[
        $= dtclsRecu = ENN59
    $] else $@[
        $= dtclsRecu = ENN35
    $]
    if wordPos($rz , 'RR2 RQ2') > 0 then $@[
        $= dispRecU  = DISP(NEW,DELETE,CATLG)
    $] else $@[
        $= dispRecU  = DISP(NEW,DELETE,DELETE)
    $]
    $@%[oneTempl - '?',   'standard system template' $]
    $@%[oneTempl - '?#S', 'standard system template' $]
    if $dbSysElar then $@[
        if $dbSys == 'DVBP' then $@[
            $= xbUM = SUB#ELA2
            $= xbUQ = $''
            $= xbCS = (5000,5000) CYL
            $= xbTS = (5000,5000) CYL
            $= xbUS = (1000,100) CYL
            $= xbPu = P0.&DB..&SN..SYSPUNCH.&UNIQ.
            $= xbRe = P0.&DB..&SN..SYSREC.&UNIQ.
        $] else $@[
            $= xbUM = COM#A019
            $= xbUQ = .&UNIQ.
            $= xbCS = (1500,10000) TRK
            $= xbTS = (2000,600) CYL
            $= xbUS = (2000,600) CYL
            $= xbPu = S0.&DB..&SN..D&YE(3).&MO.&DA..T&MI.&SC.
            $= xbRe = S0.&DB..&SN..APROC(+1)
        $]
        $@%[oneTempl - 'XB?', 'xb template' $]
        if $dbSys <> 'DVBP' then $@[
            $= pbDB = U&PB..&DB.
            $= uxDB = UX.&DB.
            $= lql  = 2
            $]
        $@%[oneTempl - 'XB?N', 'xb template' $]
        $@%[oneTempl - 'XB?1', 'xb template' $]
        $= pbDB = U&PB..&DB(2).
        $= uxDB = UX.&DB(2).
        $= lql  = 2
        $@%[oneTempl - 'DX?', 'dxb (temporary) template' $]
        $]
    $= pbDB = U&PB..&DB.
    $= uxDB = UX.&DB.
    $= lql  = 2
    $@%[oneTempl - '?#U', 'standard user template' $]
    $]
$]
call jClose $csDist
call adrIsp "view dataset('"$outLib"(##dist)')", 4
$** -------------------------------------------------------------------

$proc $@/oneTempl/
    $@ parse arg , mMsk, txt
    $= mbSrc =- repAll(mMsk, '?', $mbId)
    $= mbr   =- repAll(mMsk, '?', templ)
    $= txt   =- txt
    $= reo =- left('REO', $lql)
    $= srt =- if($lql = 3, 'SRT', 'SO')
    $= err =- left('ERR', $lql)
    $= map =- left('MAP', $lql)
    $= dis =- left('DIS', $lql)
    $= pun =- left('PUN', $lql)
    $@gTrg
    call jWrite $csDist, "call dsnCopy '"$outLib"("$mbSrc")' ,"
    call jWrite $csDist, "   , '"$trg"("$mbr")'"
    if mMsk == 'XB?' then $@[
        $@templXB  $> $outLib($mbSrc)
    $] else if mMsk == 'XB?N' then $@[
        $@templXBN $> $outLib($mbSrc)
    $] else if mMsk == 'XB?1' then $@[
        $@templXB1 $> $outLib($mbSrc)
    $] else $@[
        $@templAll $> $outLib($mbSrc)
    $]
$/oneTempl/

$proc $@=/templHead/
-- $-[overlay($txt $mbr, right($rz $dbSys 'v=14', 69))$]
-- $-[right('generiert am' f('%t s') $*+
              'durch rz4/dsn.source.tmpl(gen)', 69)$]
$/templHead/
$proc $@/templAll/
    $@templHead
    $@%[templA2 - 1 $]
$/templAll/
$proc $@=/templA2/
$@ parse arg , genPun

TEMPLATE TCOPYD    -- COPYDDN fuer copy etc. (1 Tag/Woche auf Disk)
    DSN('&SSID..$pbDB.&SN..P&PART..&UNIQ.')
    DATACLAS(ENN35) MGMTCLAS($copyMgmt) $storFar
    SPACE (1500,10000) TRK

TEMPLATE TCOPYS    -- COPYDDN anlog TCOPYD, aber mit space
    DSN('&SSID..$pbDB.&SN..P&PART..&UNIQ.')
    DATACLAS(ENN35) MGMTCLAS($copyMgmt) $storFar
    SPACE (800,500) CYL

TEMPLATE TCOPYD8   -- COPYDDN 1 Woche auf Disk, mit space
    DSN('&SSID..$pbDB.&SN..P&PART..&UNIQ.')
    DATACLAS(ENN35) MGMTCLAS(COM#A041) $storFar
    SPACE (1500,10000) TRK

TEMPLATE TCOPYT    -- COPYDDN auf Tape
    DSN('&SSID..$pbDB.&SN..P&PART..&UNIQ.')
    UNIT 3490 RETPD 23 STACK YES

TEMPLATE TSRECD    -- UNLDDN fuer Unload
    DSN('&SSID..$uxDB.&SN..P&PART..D&YE(3).&MO.&DA..REC')
    DATACLAS(ENN35) MGMTCLAS(COM#A032)
    SPACE TRK MAXPRIME 600

TEMPLATE TSRECO    -- UNLDDN fuer offline Reorg, Delete nach 5 Tagen
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..$reo')
    DATACLAS(ENN35) MGMTCLAS(COM#E005)
    SPACE TRK MAXPRIME 600

TEMPLATE TSRECU    -- UNLDDN fuer UTS Migration, mit sofort Delete
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..UTS')
    $dispRecU
    DATACLAS($dtclsRecu) MGMTCLAS(COM#E001)
    SPACE CYL

TEMPLATE TSYUTD    -- WORKDDN(1,) = SYSUT1 fuer check, load, merge
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..UT')
    DATACLAS(ENN35) MGMTCLAS(COM#E005)
    SPACE TRK MAXPRIME 600

TEMPLATE TSYUTS    -- WORKDDN(1,) = SYSUT1 wie tSyUtD mit Space
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..UT')
    DATACLAS(ENN35) MGMTCLAS(COM#E005)
    SPACE (100,10000) TRK

TEMPLATE TSOUTD    -- WORKDDN(,2) = SORTOUT fuer checkData, load
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..$srt')
    DATACLAS(ENN35) MGMTCLAS(COM#E005)
    SPACE TRK MAXPRIME 600

TEMPLATE TSOUTS    -- WORKDDN(,2) = SORTOUT wie tSOutD mit space
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..$srt')
    DATACLAS(ENN35) MGMTCLAS(COM#E005)
    SPACE (100,10000) TRK

TEMPLATE TERRD     -- ERRDDN fuer Load, CheckData
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..$err')
    DATACLAS(ENN35) MGMTCLAS(COM#E005)
    SPACE (100,10000) TRK

TEMPLATE TMAPD     -- MAPDDN fuer load mit enforce constraints
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..$map')
    DATACLAS(ENN35) MGMTCLAS(COM#E005)
    SPACE (100,10000) TRK

TEMPLATE TDISC     -- DISCARDDN fuer Load, Reorg
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..$dis')
    DATACLAS(ENN35) MGMTCLAS(COM#A032)
    SPACE (100,10000) TRK

$@ if genPun then $@=[
TEMPLATE TPUNCH    -- PUNCHDDN fuer reorg unload
    DSN('&SSID..$uxDB.&SN..P&PART..D&YE(3).&MO.&DA..PUN')
    DATACLAS(NULL8) MGMTCLAS(COM#A032)
    SPACE(1,10) TRK

$]
TEMPLATE TPUNO     -- PUNCHDDN fuer offline Reorg, mit sofort Delete
    DSN('&SSID..$uxDB.&SN..P&PART..&UNIQ..$pun')
    DATACLAS(NULL8) MGMTCLAS(COM#A032)
    SPACE(1,10) TRK
$/templA2/

$proc $@=/templXB/
$@templHead

TEMPLATE TCOPYD    -- COPYDDN fuer copy etc.
    DSN('&SSID..$pbDB.&SN..P&PART..&UNIQ.')
    DATACLAS(ENN35) MGMTCLAS(COM#A011) $storFar
    SPACE $xbCS

TEMPLATE TCOPYT    -- COPYDDN auf Tape
    DSN '&SSID..$pbDB.&SN..P&PART..&UNIQ.'
    UNIT 3490 RETPD 9999 STACK YES

TEMPLATE TPUNCH
    DSN('XB.&DB..&SN..P&PART..SYSPCH$xbUQ')
    DATACLAS(NULL8) MGMTCLAS(COM#A019)
    SPACE (1,1) TRK

TEMPLATE TPUNCHT
    DSN 'XB.&DB..&SN..P&PART..SYSPCH$xbUQ'
    UNIT 3490 RETPD 9999 STACK YES

TEMPLATE TUNL
    DSN('XB.&DB..&SN..P&PART..SYSREC.&UNIQ.')
    $storAll MGMTCLAS (COM#A019) DATACLAS (ENN35)
    SPACE $xbTS

TEMPLATE TUNLT
    DSN      'XB.&DB..&SN..P&PART..SYSREC.&UNIQ.'
    UNIT 3490 RETPD 9999 STACK YES

$/templXB/

$proc $@=/templXBN/
$@templHead
TEMPLATE TCOPYD
    DSN('&SSID..$pbDB.&SN..P&PART..&UNIQ.')
    DATACLAS(ENN35) MGMTCLAS(COM#A011) $storFar
    SPACE (1500,10000) TRK

TEMPLATE TPUNCH
    DSN('XB.&DB..&SN..P&PART..SYSPCH')
    $storFar  MGMTCLAS ($xbUM) DATACLAS (NULL8)
    SPACE (1,1) TRK

TEMPLATE TUNL
    DSN('XB.&DB..&SN..P&PART..SYSREC.&UNIQ.')
    $storFar  MGMTCLAS ($xbUM) DATACLAS (ENN35)
    SPACE (100,12000) TRK
$/templXBN/

$proc $@=/templXB1/
$@templHead
TEMPLATE TPUNCHT
    UNIT     3490
    DSN      'XB.DIV.$xbPu'
    RETPD    9999
    STACK    YES

TEMPLATE TUNLT
    UNIT     3490
    DSN      'XB.DIV.$xbRe'
    RETPD    9999
    STACK    YES

TEMPLATE TPUNCH
    DSN 'XB.DIV.$xbPu'
    DATACLAS(NULL8) MGMTCLAS(COM#A019)
    SPACE (1,1) TRK

TEMPLATE TUNL
    DSN 'XB.DIV.$xbRe'
    DATACLAS(ENN35) MGMTCLAS(COM#A019)
    SPACE $xbUS
$/templXB1/
$#out                                              20161114 09:42:32
$#out                                              20161114 09:38:56
$#out                                              20160831 15:23:47
$#out                                              20160831 15:23:26
$#out                                              20160728 15:14:18
$#out                                              20160728 15:13:21
$#out                                              20160621 15:46:30
$#out                                              20160621 15:44:51
$#out                                              20160621 15:44:11
*** run error ***
adr ispExec rc 20 in view dataset('~.tst.tmpl(##dist)'): '~.TST.TMPL' was not...
$#out                                              20160520 11:16:54
$#out                                              20160520 11:13:24
$#out                                              20160520 08:28:44
$#out                                              20160520 07:35:25
$#out                                              20160520 07:18:15
$#out                                              20160520 07:02:19
*** run error ***
undefined var uts
$#out                                              20160520 07:01:14
*** run error ***
undefined var uts
$#out                                              20160519 09:56:57
*** run error ***
undefined var uts
$#out                                              20160519 09:55:51
*** run error ***
undefined var uts
$#out                                              20160519 09:42:37
*** run error ***
adrTso rc= 12 stmt=alloc dd(CAT1) new catalog dataset('A234579.TST.TMPL') recfm(
IKJ56893I DATA SET A234579.TST.TMPL NOT ALLOCATED+
IGD308I DATA SET ALLOCATION REQUEST FAILED -
RACF FUNCTION: RACDEF FOR
DATA SET: A234579.TST.TMPL WITH RETURN CODE 08 REASON CODE 00
$#out                                              20150219 08:06:00
$#out                                              20150218 20:45:31