Daily Web Day - REXX



Sample REXX program to get list of datasets

/******************************Rexx***********************************/
/* Rexx Program to retrieve the List of Datasets Names Prefixed */
/* with given qualifier */
/* */
/* --- By Murali*/

/*©2008 Muralidharan Ramasamy - www.muraliwebworld.com*/
/*********************************************************************/
Address Tso
"Execio * Diskr Filelist(Stem Inmds. finis"
If Rc > 0 then
Do
Say '!!!! Error in Opening Filelist Dataset !!!!'
Say '!!!! DDNAME : FILELIST !!!!'
Rc = 08
Return Rc
End

Errrepid = 'XXXXX988-ERR'

Cnt2 = 1
Cntg = 1
Cntv = 1

Gdgprev = ''
Pgdgnam = ''

Prevds = 'FIRST'
Currds = 'FIRST'

Err = 1
Seq = 1
Nodset = 'NO'
Epagcnt = 1

Eheader.1 = D2X('1')||' '||Copies('-',131)
Eheader.2 = ' REPORT-ID:'||Errrepid||Copies(' ',98)||,
'PAGE :'||Epagcnt
Eheader.3 = Copies(' ',29)||'HIGH LEVEL QUALIFIER ENTRY ERRORS'
Eheader.4 = ' Run Date :'||date(u)||copies(' ',19)||'AND'
Eheader.5 = ' Run Time :'||time()||copies(' ',9)||,
'LIST OF DATASETS NOT PROCESSED'
Eheader.6 = ' '||Copies('-',131)
Eheader.7 = D2X('0')||' '

Do Cnt1 = 1 to Inmds.0

Parse var Inmds.cnt1 qualif '.*' mdsrest
Parse var qualif mdsnam1 ' ' mdsnam2 '.' mdsrest
Mdsname = Strip(Mdsnam1)

Parse Var mdsname mprefx '.' mprefx1

Mdsname = "'"||mdsname||"'"

X=Outtrap(Parr.)

"ListC Level("||mdsname||")"
If RC = 4 then
Do
If Err = 1 then
Do
"Execio * Diskw Errfile1(Stem Eheader. "
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-ERR DDNAME:ERRFILE1'
RC=08
RETURN RC
End

Epagcnt = Epagcnt + 1
End
If Err = 55 then
Do
"Execio * Diskw Errfile1(stem Errrec. "
If RC > 0 then
Do
Say RC
Say 'Error in writing report X9876XXX-ERR DDNAME:ERRFILE1'
RC=08
RETURN RC
End

Eheader.2 = ' REPORT-ID:'||Errrepid||Copies(' ',98)||,
'PAGE :'||Epagcnt
Eheader.4 = ' Run Date :'||date(u)
Eheader.5 = ' Run Time :'||time()
"Execio * Diskw Errfile1(Stem Eheader. "
Epagcnt = Epagcnt + 1
Err = 1
Errrec.0 = ''
End
Errrec.err=' '||Seq||'. No datasets found for qualifier:'||,
Mdsname
Err = Err + 1
seq = seq + 1
RC = 0
Nodset = 'YES'
Iterate
End

Upper Mprefx
Prefx = Mprefx

Inpclus = 'NO'
Inpclusv = Word(Parr.1,1)

If Inpclusv = 'DATA' then
Inpclus = 'YES'

Do Cnt = 1 to Parr.0

Sclustr = Word(Parr.cnt,1)

Parr1 = Strip(Word(Parr.cnt,3))

Parse Var Parr1 Parr2 '.' Parr3 ' ' Prest

Vdsorg = 'NON TERasm'

If length(Parr1) > 6 then
Segstrg = Substr(Parr1,(length(Parr1)-5),3)
If length(Parr1) > 7 then
Vdsprev = Substr(Parr1,1,(length(Parr1)-7))

If length(Parr1) > 7 then
Do
If (Substr(Parr1,(length(Parr1)-5),3) = 'SEG') & ,
Vdsprev=(Substr(Parr1,1,(length(Parr1)-7))) then
Do
Vdsorg='TERasm'
End
End

If Prefx=Parr2 then
Do
Seqname = word(Parr.cnt,3)
Dsorgn = LISTDSI("'"seqname"'" NORECALL)
If (sysreason = 25 | sysreason = 9) then
Do
If Err = 1 then
Do
"Execio * Diskw Errfile1(Stem Eheader. "
If RC > 0 then
Do
Say RC
Say 'Error in writing report GHRYTHH-ERR '||,
'DDNAME:ERRFILE1'
RC=08
RETURN RC
End

Epagcnt = Epagcnt + 1
End
If Err = 55 then
Do
"Execio * Diskw Errfile1(stem Errrec. "
If RC > 0 then
Do
Say RC
Say 'Error in writing report JHGFTYS-ERR '||,
'DDNAME:ERRFILE1'
RC=08
RETURN RC
End

Eheader.2 = ' REPORT-ID:'||Errrepid||Copies(' ',98)||,
'PAGE :'||Epagcnt
Eheader.4 = ' Run Date :'||date(u)
Eheader.5 = ' Run Time :'||time()
"Execio * Diskw Errfile1(Stem Eheader. "
Epagcnt = Epagcnt + 1
Err = 1
Errrec.0 = ''
End
Errrec.Err = ' '||Seq||'.'||' The Dataset '||"'"||,
Seqname||"'"||' is in Migrated Status.'||,
'*** Ignored by File analyzer ***'
Err = Err + 1
Seq = Seq + 1
Iterate
End

Verdsn="'"||seqname||"'"
If sysdsn(verdsn) = 'OK' then
Do
Call Detdsorg
End
End
End

Parr.0 = ''
X=Outtrap(Off)
End
If cntg > 1 then
Do
Gdgsnam.cntg = Seqname
Cntg = Cntg + 1
End

Modsnam.0 = Cnt2-1
Gdgsnam.0 = Cntg-1
Vsamnam.0 = Cntv-1
Errrec.0 = Err-1

If Gdgsnam.0 > 0 then
"Execio "||Gdgsnam.0||" Diskw Seqlist(Stem Gdgsnam."
If Rc > 0 then
Do
Say '!!!! Error in Writing GDG list !!!!'
Say '!!!! DDNAME : SEQLIST !!!!'
Rc = 08
Return Rc
End

If Modsnam.0 > 0 then
"Execio "||Modsnam.0||" Diskw Seqlist(Stem Modsnam. Finis"
If Rc > 0 then
Do
Say '!!!! Error in Writing Seqlist Dataset !!!!'
Say '!!!! DDNAME : SEQLIST !!!!'
Rc = 08
Return Rc
End

If Errrec.0 > 0 then
"Execio "||Errrec.0||" Diskw Errfile1(Stem Errrec. Finis"
If Rc > 0 then
Do
Say '!!!! Problem in creating Error report !!!!'
Say '!!!! DDNAME : Errfile1 !!!!'
Rc = 08
Return Rc
End
If Errrec.0 = 0 then
Do
Eheader.7 = D2X('0')||' '||,
' No High Level Qualifier Errors Found'
"Execio * Diskw Errfile1(Stem Eheader."
If RC > 0 then
Do
Say '!! Problem in creating Error report !!'
Say '!! DDNAME : Errfile1 !!'
RC=08
Return RC
End
End

If Vsamnam.0 > 0 then
"Execio "||Vsamnam.0||" Diskw Vsamlist(Stem Vsamnam. Finis"
If Rc > 0 then
Do
Say '!!!! Error in Writing Vsamlist Dataset !!!!'
Say '!!!! DDNAME : VSAMLIST !!!!'
Rc = 08
Return Rc
End

If Nodset = 'YES' then
Do
RC = 04
Return RC
End

Exit

Detdsorg:

Dsorgn = LISTDSI("'"seqname"'" NORECALL)
If Sysdsorg = 'PS' then
Do
Gdgver = Substr(seqname,length(seqname)-2,1)
Gdgiden = Substr(seqname,length(seqname)-7,1)
Gdgprev = Gdgnum
Gdgnum = Substr(Seqname,length(seqname)-6,4)
Prevds = Currds
Currds = Substr(Seqname,1,length(seqname)-9)

If (Gdgver = 'V') & (Gdgiden = 'G') then
Do
If (Prevds ^= Currds) & (Currds ^= 'FIRST') & ,
(Pgdgnam ^= '') then
Do
Gdgsnam.cntg = Pgdgnam
Cntg = Cntg + 1
End
Pgdgnam = Seqname
End
Else
Do
Modsnam.cnt2 = Seqname
Cnt2 = Cnt2 + 1
End
End
Else
Do
If (Sysdsorg = 'VS') & (Sclustr = 'CLUSTER') ,
& (Vdsorg = 'NON TERasm') then
Do
Vdsprev = Seqname
Vsamnam.Cntv = Seqname
Cntv = Cntv + 1
End
End
return


Sample REXX program to calculate used space in mainframe datasets(VSAM/Sequential dataset)

/****************************Rexx************************************/
/* To calculate Space in VSAM & Sequential Datasets */
/* */
/* - By Murali*/

/*©2008 Muralidharan Ramasamy - www.muraliwebworld.com*/
/* */
/********************************************************************/

Err = 1
Oflag = 'NO'
Seqrepid = 'XXXXXXXX-RPT01'
V1repid = 'XXXXXXXX-RPT02'
V2repid = 'XXXXXXXX-RPT03'

"Execio * Diskr parmlist(stem parmin. finis"
Parse var parmin.1 Parm1 ' ' Parm2 ' ' Parm3 ' ' Parmrest

Maxsextn = Parm1 /* Maximum extents for Sequential Dataset */
Maxextn = Parm2 /* Maximum extents for Vsam Dataset */
Maxrba = Parm3 /* Maximum value for RBA */

Say ' '
Say '-----------------------------------------------'
Say 'Maximum Extents for Sequential files:' Maxsextn
Say 'Maximum Extents for Vsam Files :' Maxextn
Say 'Maximum RBA for Vsam Files :' Maxrba
Say '-----------------------------------------------'
Say ' '

Call Seqinfo

If rc > 0 then
finrc = rc

Call Vsaminfo

If rc > 0 then
finrc = rc

If finrc > 0 then
Do
Say ' Error in writing reports !!!!!!'
rc = finrc
End

If (rc = 0) & (Oflag = 'YES') then
rc = 32

Return rc

/*----------------------------------------------------------------*/
/* SEQUENTIAL DATASET SPACE CALCULATION */
/*----------------------------------------------------------------*/
Seqinfo:

"Execio * Diskr Seqlist(Stem inrec."
Spagcnt = 1
Lcnt = 1
Lnhcnt = 1

Sheader.1 = D2X('1')||' '||Copies('-',131)
Sheader.2 = ' Report-ID:'||Seqrepid||Copies(' ',95)||,
'Page No :'||Spagcnt
Sheader.3 = Copies(' ',27)||'SEQUENTIAL AND GDG DATASETS WHICH '||,
'ARE HAVING'
Sheader.4 = Copies(' ',27)||' MORE THAN OR EQUAL TO '||maxsextn||
' EXTENTS'
Sheader.5 = ' Run Date :'||date(u)
Sheader.6 = ' Run Time :'||time()
Sheader.7 = ' '||Copies('-',131)
Sheader.8 = ' Dataset Name'||Copies(' ',47)||' Extents '
Sheader.9 = D2X('0')||' '||Copies('-',131)

If Inrec.0 = 0 Then
Do
"Execio * Diskw Report1(Stem Sheader. "
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT01 DDNAME:REPORT1'
RC=08
Return RC
End

Say 'No High level qualifiers given as input for Sequential files'
Queue ' No High level qualifiers given as input '||,
'for Sequential files'

"EXECIO * DISKW Report1(FINIS"
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT01 DDNAME:REPORT1'
RC=08
Return RC
End

RC = 0
Return RC
End
Else
Do
Do I=1 to inrec.0
var2 = strip(SUBSTR(inrec.i,1,72))
Dsname = STRIP(SUBSTR(inrec.i,1,72))
Dsn = "'"||Dsname||"'"

VAR1 = ''''||var2||''''
Migrstat=LISTDSI(VAR1 norecall)

If (sysreason = 25 | sysreason = 9) then
Do
Say 'Dataset: '||dsname||' Migrated.'||,
'Ignored by File analyzer.'
Iterate
End

If SYSDSN(Dsn) ^= 'OK' THEN
Do
ITERATE
END

VAR1 = ''''||var2||''''
X=LISTDSI(VAR1)
Var3 = left(var2,45)
Var4 = sysextents
Var5 = left(var4,04)
If Lnhcnt = 1 then
Do
"Execio * Diskw report1(Stem Sheader."
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT01 DDNAME:REPORT1
RC=08
Return RC
End
End
If Lcnt = 46 then
Do
"Execio * Diskw report1(Stem Srec."
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXX-RPT01 DDNAME:REPORT1
RC=08
Return RC
End

lcnt = 1
Srec.0 = ''
Spagcnt = Spagcnt + 1
Sheader.2 = ' REPORT-ID:'||Seqrepid||Copies(' ',98)||,
'PAGE :'||Spagcnt

"Execio * Diskw report1(Stem Sheader."
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT01 DDNAME:REPORT1
RC=08
Return RC
End
End
If Var5 >= Maxsextn then
Do
Srec.lcnt=' '||var3||copies(' ',15)||var5
lcnt = lcnt + 1
Oflag = 'YES'
End
lnhcnt = lnhcnt + 1
End

/* Write Report01 - for Sequential Datasets */

"Execio * Diskw report1(Stem Srec. finis"
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT01 DDNAME:REPORT1'
RC=08
Return RC
End

"Execio 0 Diskr Seqlist(finis"
If RC > 0 then
Do
Say RC
Say 'Error in Reading file DDNAME:seqlist'
RC=08
Return RC
End

If Oflag = 'NO' then
Do
Noexe =' No Sequential Datasets are having Extents >= '||,
Maxsextn
Emsg.1 = Noexe
"Execio * Diskw report1(Stem Sheader."
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXX-RPT01 DDNAME:REPORT1'
RC=08
Return RC
End

"Execio 1 Diskw Report1(Stem Emsg. finis"
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT01 DDNAME:REPORT1'
RC=08
Return RC
End
End
Return rc
end


/*----------------------------------------------------------------*/
/* VSAM DATASET SPACE CALCULATION */
/*----------------------------------------------------------------*/
Vsaminfo:

"Execio * Diskr Vsamlist(Stem FILNAM. Finis"
If RC > 0 then
Do
Say RC
Say 'Error in Reading file DDNAME:VSAMLIST'
RC=08
Return RC
End

Pvalue = 0
Dcnt1 = 1
Dcnt2 = 1
Inform1.0 = 0
Inform2.0 = 0
V1pagcnt = 1
V2pagcnt = 1
lvcnt = 1

/******** Header for Report : XXXXX-02 **********/

V1heder.1 = D2X('1')||' '||Copies('-',131)
V1heder.2 = ' Report-ID:'||V1repid||Copies(' ',95)||,
'Page No :'||V1pagcnt
V1heder.3 = Copies(' ',29)||'VSAM DATASETS WHICH ARE HAVING RBA VALUE'
V1heder.4 = Copies(' ',29)||' MORE THAN OR EQUAL TO '||Maxrba||' GB'
V1heder.5 = ' Run Date :'||date(u)
V1heder.6 = ' Run Time :'||time()
V1heder.7 = ' '||Copies('-',131)
V1heder.8 = ' Dataset Name'||Copies(' ',47)||' RBA '
V1heder.9 = D2X('0')||' '||Copies('-',131)

/***** Header for Report : XXXXX-03 **********/

V2heder.1 = D2X('1')||' '||Copies('-',131)
V2heder.2 = ' Report-ID:'||V2repid||Copies(' ',95)||,
'Page No :'||V2pagcnt
V2heder.3 = Copies(' ',26)||'VSAM DATASETS WHICH ARE HAVING '||,
'MAXIMUM EXTENTS'
V2heder.4 = Copies(' ',26)||' MORE THAN OR EQUAL TO '||Maxextn||,
' EXTENTS'
V2heder.5 = ' Run Date :'||date(u)
V2heder.6 = ' Run Time :'||time()
V2heder.7 = ' '||Copies('-',131)
V2heder.8 = ' Dataset Name'||Copies(' ',47)||' Extents '
V2heder.9 = D2X('0')||' '||Copies('-',131)

If FILNAM.0 = 0 Then
Do
"Execio * Diskw Report2(Stem V1heder. "
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXXX-RPT02 DDNAME:REPORT2'
RC=08
Return RC
End

"Execio * Diskw Report3(Stem V2heder. "
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXX-RPT03 DDNAME:REPORT3'
RC=08
Return RC
End

Say ' No High level qualifiers given as input for VSAM files'
Queue ' No High level qualifiers given '||,
'as input for VSAM files'

"Execio * Diskw Report2(Finis"
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXXX-RPT02 DDNAME:REPORT2'
RC=08
Return RC
End

Queue ' No High level qualifiers given '||,
'as input for VSAM files'

"Execio * Diskw Report3(Finis"
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXXX-RPT03 DDNAME:REPORT3'
RC=08
Return RC
End
RC = 0
Return RC
End
Else
Do
Do Filcnt = 1 TO Filnam.0
Line.0 = ''
Dsname = STRIP(SUBSTR(Filnam.Filcnt,1,72))
Dsn = "'"||Dsname||"'"

VAR1 = ''''||Dsname||''''
Migrstat = LISTDSI(VAR1 NORECALL)

If (Sysreason = 25 | sysreason = 9) then
Do
Say 'Dataset: '||dsname||' Migrated.'||,
'Ignored by File analyzer.'
Iterate
End

If SYSDSN(Dsn) ^= 'OK' THEN
Do
Say DSNAME||' -- DATASET NOT EXIST'
ITERATE
END

If lvcnt = 1 then
Do
"Execio * Diskw Report2(stem V1heder."
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXX-RPT02 DDNAME:REPORT2'
RC=08
Return RC
End
End

If Dcnt1 = 47 then
Do
"Execio * Diskw Report2(stem Inform1."
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXXX-RPT02 DDNAME:REPORT2'
RC=08
Return RC
End

Dcnt1 = 1
Inform1.0 = ''
V1pagcnt = V1pagcnt + 1
V1heder.2 = ' Report-ID:'||V1repid||Copies(' ',95)||,
'Page No :'||V1pagcnt

"Execio * Diskw Report2(stem V1heder."
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXX-RPT03 DDNAME:REPORT3'
RC=08
Return RC
End
End

If lvcnt = 1 then
Do
"Execio * Diskw Report3(stem V2heder."
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXX9-RPT03 DDNAME:REPORT3'
RC=08
Return RC
End
End

If Dcnt2 = 47 then
Do
"Execio * Diskw Report3(stem Inform2."
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXXX-RPT03 DDNAME:REPORT3'
RC=08
Return RC
End

Dcnt2 = 1
Inform1.0 = ''
V2pagcnt = V2pagcnt + 1
V2heder.2 = ' Report-ID:'||V2repid||Copies(' ',95)||,
'Page No :'||V2pagcnt

"Execio * Diskw Report3(stem V2heder."
If RC > 0 then
Do
Say rc
Say 'Error in writing Report XXXXXX-RPT03 DDNAME:REPORT3'
RC=08
Return RC
End
End

X=Outtrap(Line.)

"Listc Entries('"||DSNAME||"') All"

Lincnt = 0
Spacewrd = 'FALSE'

Do Until (SPACEWRD = 'TRUE')
Extents = INDEX(LINE.LINCNT,'EXTENTS')
IF Extents > 0 THEN
DO
SPACEWRD = 'TRUE'
SPCSTR = STRIP(WORD(LINE.LINCNT,3))
LENSPC = LENGTH(SPCSTR)
LHYPEN = LASTPOS('-',SPCSTR)

/* To Trap Extents */

Extents = SUBSTR(SPCSTR,LHYPEN+1,LENSPC-(LHYPEN))
LINCNT = LINCNT + 5

/* To Trap High Allocated RBA */

Highrba = STRIP(WORD(LINE.LINCNT,2))
Lhighrba = LENGTH(Highrba)
LHYPEN = LASTPOS('-',Highrba)
ARba = SUBSTR(Highrba,LHYPEN+1,Lhighrba-(LHYPEN))

/* To write into Report1 if RBA > 3.9GB */

If Arba >= Maxrba Then
DO
Inform1.Dcnt1=' '||left(DSNAME,45)||,
COPIES(' ',15)||left(Arba,30)
Dcnt1= Dcnt1 + 1
Oflag = 'YES'
END
If Extents >= Maxextn Then
DO
Inform2.Dcnt2=' '||left(DSNAME,45)||,
COPIES(' ',15)||left(Extents,10)
Dcnt2= Dcnt2 + 1
Oflag = 'YES'
END
END
LINCNT = LINCNT + 1
END
lvcnt = lvcnt + 1
END

Inform1.0 = Dcnt1 - 1

If Inform1.0=0 then
Inform1.1 = ' No Vsam Datasets are having RBA'||,
' value >= '||Maxrba
"EXECIO * DISKW Report2(STEM INFORM1. FINIS"
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT02 DDNAME:REPORT2'
RC=08
Return RC
End

Inform2.0 = Dcnt2 - 1

If Inform2.0=0 then
Inform2.1 = ' No Vsam Datasets are having Extents >= '||,
Maxextn
"EXECIO * DISKW Report3(STEM INFORM2. FINIS"
If RC > 0 then
Do
Say RC
Say 'Error in writing report XXXXXXX-RPT03 DDNAME:REPORT3'
RC=08
Return RC
End

return Rc
END

Loading
Your Ad Here