zOs/REXX/LISTDSI

/* rexx
**********************************************************************/
say '9999 -> ' dsnArc(A540769.zzz.save9999)
say '9991 -> ' dsnArc(A540769.zzz.save9991)
say '9591 -> ' dsnArc(A540769.zzz.save9591)
say '9591 -> ' dsnArc(A5407.zzz.save9591)
say 'yzzz -> ' dsnArc(A5407yzzz.save9591)
exit
dsnArc: procedure expose m.
parse arg dsn
    lc = listDsi("'"dsn"' noRecall")
    if lc = 0 then
        return ''
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
call findHalfTrackSize 6
exit
findHalfTrackSize:
parse arg lim
    lMin = 0
    len = 32760
    do forEver
        address tso 'alloc dd(f1) recfm(f b) lRecl('len')',
                     'blksize('len')'
        say 'len' len 'alloc' rc
        rc = listdsi(f1 file)
        say varExp('sysReason sysMsgLvl1 sysMsgLvl2')
        say varExp('sysLRecL sysBlkSize sysKeyLen')
        say varExp('sysUnit sysTrksCyl sysBlksTrk sysUnits sysUsed')
        say 'listDsi rc' rc 'for' w sysdsname
        address tso 'free dd(f1)'
        if sysBlksTrk < lim then
            lMax = len
        else
            lMin = len
        len = trunc((lMax + lMin) / 2)
        say '***** min' lMin 'max' lMax 'len' len
        if len = lMin then
            leave
        end
    say lim 'blocks' lMin 'track' (lim * lMin)
    return lMin
endProcedure findHalfTrackSize
/*  if rc ^= 0 then */
        say varExp('sysReason sysMsgLvl1 sysMsgLvl2')
    say varExp('sysLRecL sysBlkSize sysKeyLen')
    say varExp('sysUnit sysTrksCyl sysBlksTrk sysUnits sysUsed')
    exit
   w = sysexec file
   w = "'A540769.WK.TEXV'"
    rc = listdsi(w)
    say 'listDsi rc' rc 'for' w sysdsname
/*  if rc ^= 0 then */
        say varExp('sysReason sysMsgLvl1 sysMsgLvl2')
    say varExp('sysLRecL sysBlkSize sysKeyLen')
    say varExp('sysUnit sysTrksCyl sysBlksTrk sysUnits sysUsed')
    exit
parse arg dsns
if dsns = '' then
    dsns = "'DBOF.MF01A1P.A150A.P0003.D08014.T090323' wk.rexx"
do wx = 1 to words(dsns)
    w = word(dsns, wx)
    rc = listdsi(w)
    say 'listDsi rc' rc 'for' w
    if rc ^= 0 then do
        say varExp('sysReason sysMsgLvl1 sysMsgLvl2')
        end
    say varExp('sysLRecL sysBlkSize sysKeyLen')
    say varExp('sysUnit sysTrksCyl sysBlksTrk sysUnits sysUsed')
    if sysUnits = 'CYLINDER' then
        cy = sysUsed
    else if sysUnits = 'TRACK' then
        cy = sysUsed / sysTrksCyl
    else if sysUnits = 'BLOCK' then
        cy = sysUsed / sysTrksCyl / sysBlksTrk
    else cy = sysUnits '????'
    say 'cylinders' cy
    end
exit
varExp:
   parse arg ggVarExpVars
   ggVarExp = ''
   do ggVarExpIx = 1 to words(ggVarExpVars)
       ggVarExp1 = word(ggVarExpVars, ggVarExpIx)
       ggVarExp = ggVarExp ggVarExp1':' value(ggVarExp1)
       end
   return ggVarExp
endSubroutine varExp