/* REXX /* TITLE: Set JCL CC based on REXX IF (eg. day, hour, etc) */ M00. E00. This program is executed in batch. For example: //REXXIF EXEC PGM=IKJEFT01,PARM='IF DAY=TUE THEN CC=1' FORMAT: PARM='IF crit THEN CC=n' n - Condition code to set if criteria met (dflt=1) crit - DAY=2 Is this the 2nd day of the month? DAY=Tue Is this Tuesday? SET=SET Set to this CC, no check made HOUR= Is this the hour? HRSET=nn,nn,nn Is it one of these hours? QTR Is this month, MAR,JUN,SEP or DEC? CNTR=ccc Is this datacenter ccc? CNTR=ccc,cc2 Is this datacenter ccc or cc2? CNTR/=ccc,cc2 Is this not datacenter ccc nor cc2? Note: 'THEN' is optional, used for clarity. EXAMPLES. (All Input passed via PARM= clause) PARM='IF DAY=2 THEN CC=1' PARM='IF DAY=TUE THEN CC=2' PARM='IF SET=SET THEN CC=&CC.' PARM='IF QTR THEN CC=&CC.' PARM='IF CNTR=DEV,OME THEN CC=1' PARM='IF CNTR/=DEV,OME THEN CC=1' TO USE CC=1 in subsequent steps, use one of 2 methods: // IF REXXIF.RC = 1 THEN //DOIF1 EXEC PGM=IEFBR14 // ENDIF or //DOIF2 EXEC PGM=IEFBR14,COND=(1,NE,REXXIF) LOGIC: 1. Read and Initialize variables 2. Analyze and set condition code based on criteria SUBROUTINES USED: none CHANGES: 2016.12.14 modified for publication */ "PROF MSGID" /*------------------------------------------------------------------*/ /* 1. Read and Initialize variables */ /*------------------------------------------------------------------*/ ARG PARMS IF POS('CC=',PARMS) /= 0 THEN PARSE VAR PARMS 'CC=' CC FX ELSE CC = 1 /* dflt exit cc if crit met */ SELECT /* SELECT FOR criteria */ WHEN POS('CNTR',PARMS) /= 0 THEN DO THECRIT = 'DATACENTER' IF POS('/=',PARMS) /= 0 THEN DO SELECT = 'NE' /* not equals check */ PARSE VAR PARMS '/=' CENTERS FX END ELSE DO SELECT = 'EQ' /* equals check */ PARSE VAR PARMS '=' CENTERS FX END THISCENTER = MVSVAR(SYSNAME) THISCENTER = SUBSTR(THISCENTER,1,3) END WHEN POS('DAY',PARMS) /= 0 THEN DO PARSE VAR PARMS '=' DAY FX IF DATATYPE(DAY) = NUM THEN THECRIT = 'DAYOFMONTH' ELSE THECRIT = 'DAYOFWEEK' DAY = LEFT(DAY,3) ; DAY = STRIP(DAY) T1 = DATE() PARSE VAR T1 THISDAY FX T1 = DATE('W') PARSE UPPER VAR T1 T1 THISDAYOFWEEK = LEFT(T1,3) END WHEN POS('SET',PARMS) /= 0 THEN DO THECRIT = 'SET' END WHEN POS('HOUR',PARMS) /= 0 THEN DO PARSE VAR PARMS '=' HOUR FX HOURNOW = LEFT(TIME(),2) THECRIT = 'HOUR' END WHEN POS('HRSET',PARMS) /= 0 THEN DO PARSE VAR PARMS '=' HRSET FX HOURNOW = LEFT(TIME(),2) THECRIT = 'HRSET' END WHEN POS('QTR',PARMS) /= 0 THEN DO PARSE VAR PARMS '=' HOUR FX MONTHNOW = DATE('M') QTRMON = 'March June September December' THECRIT = 'QTR' END OTHERWISE THECRIT = 'ERROR' END /* SELECT FOR criteria */ /*------------------------------------------------------------------*/ /* Write out variables to be used. */ /*------------------------------------------------------------------*/ SAY ' ' SAY '--------------------------------------------------------------' SAY 'M00. IF routine. ' DATE('O') TIME() SAY ' Set step condition code based on criteria.' SAY ' Criteria is:' THECRIT SELECT /* SELECT for displays */ WHEN THECRIT = 'DATACENTER' THEN DO SAY ' THISCENTER:' THISCENTER SAY 'EQUAL OR NOT EQUAL:' SELECT SAY ' INPUT CENTERS:' CENTERS SAY ' WHEN CRIT MET CC:' CC END WHEN THECRIT = 'DAYOFMONTH' THEN DO SAY ' CHECK WHEN TODAY IS:' DAY SAY ' TODAY IS:' THISDAY SAY ' WHEN CRIT MET CC:' CC END WHEN THECRIT = 'DAYOFWEEK' THEN DO SAY ' CHECK WHEN TODAY IS:' DAY SAY ' TODAY IS:' THISDAYOFWEEK SAY ' WHEN CRIT MET CC:' CC END WHEN THECRIT = 'HOUR' THEN DO SAY ' CHECK WHEN HOUR IS:' HOUR SAY ' CURRENT HOUR:' HOURNOW SAY ' WHEN CRIT MET CC:' CC END WHEN THECRIT = 'HRSET' THEN DO SAY ' CURRENT HOUR:' HOURNOW SAY ' HOURS TO CHECK:' HRSET SAY ' WHEN CRIT MET CC:' CC END WHEN THECRIT = 'SET' THEN DO SAY ' WHEN criteria is SET, then CC is set regardless.' SAY ' CC:' CC END WHEN THECRIT = 'QTR' THEN DO SAY ' If this month is a quarterly Month, set cc' SAY ' Month Now:' MONTHNOW SAY ' CC:' CC SAY ' Quarterly months:' QTRMON END OTHERWISE DO SAY 'E01. ('THECRIT') is not valid. exit program.' EXIT END END /* SELECT for displays */ /*------------------------------------------------------------------*/ /* 2. Analyze and set condition code based on criteria */ /*------------------------------------------------------------------*/ SELECT WHEN THECRIT = 'HRSET' &, POS(HOURNOW,HRSET) /= 0 THEN EXIT CC WHEN THECRIT = 'DATACENTER' &, SELECT = 'EQ' & POS(THISCENTER,CENTERS) /= 0 THEN EXIT CC WHEN THECRIT = 'DATACENTER' &, SELECT = 'NE' & POS(THISCENTER,CENTERS) = 0 THEN EXIT CC WHEN THECRIT = 'DAYOFMONTH' &, DAY = THISDAY THEN EXIT CC WHEN THECRIT = 'DAYOFWEEK' &, DAY = THISDAYOFWEEK THEN EXIT CC WHEN THECRIT = 'SET' THEN EXIT CC WHEN THECRIT = 'HOUR' &, HOURNOW = HOUR THEN EXIT CC WHEN THECRIT = 'QTR' &, WORDPOS(MONTHNOW,QTRMON) /= 0 THEN EXIT CC OTHERWISE T1 = T1 END RETURN