Dear all, As promised, below please find the rexx program. It was not fully tested, and need some enhancements ((like support for instream set commands that is easy to implement and will come soon). The atatched will help you use variables in the a jcl like this:
//jobcard etc.
//var1 jcllib order=my.pds
//include unclude member=setup
//step1 exec pgm=idcams
//sysprint dd sysout=*
//sysin dd *
listcat ent(&hlq.data) all
delete &hlq..data
Listcat ent(&hlq..data) all
/*
Will be happpy to get feedbacks. Enjoy it.
| Itschak Mugzach | Director | SecuriTeam Software |
| Email: [EMAIL PROTECTED] | Mob: +972 522 986404 | Skype: Itschak
Mugzach | Web: www.Securiteam.co.il |
/* MugiRexx */
Signal set.Var
Trace On
Set.Doc:
------------------------------------------------------------------
JCL SET Support for SYSIN
Function: This program runs as an EDIT MACRO replacing the original
SUB macro. It will substitute Variables in an "DD *" type
datasets (Instream sysin) based on the JCL SET commands.
Below are the main functions of the program:
> checkpoint with save, change profile to nosave rec on.
> Find and read the INCLUDE member pointed by JCCLIB.
> Create a command table that holds the vars & values.
> Ignores none sysin variables (Let interpeter dos it).
> Mark the "DD *" data with labels.
> Do the actual change.
> Submit the job
> Discard changes.
NextRel.: > Support for Instream SET command
> Ignore IEBUPDTE inputs
Location: Your Clist (sysproc) concatanation.
Contact: <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]
(c) SecuriTeam Software Ltd. 1999-2008
------------------------------------------------------------------
Set.Var:
Cindx = 1
Csetup.0 = 1
Csetup.1.Var = '..'
Csetup.1.Val = '.'
Lindx = 0
LabelStr = "abcdefghijklmnopqrstuvwxyz"
SIFlag = -1
Set.MsgDir:
SA0001E = "SA0001E no JCLLIB Definition found in"
SA0002E = "SA0002E no INCLUDE Definition found in"
SA0003I = "SA0003I variable name & value:"
Set.Main:
Address ISPEXEC
"isredit macro"
"ISREDIT Recovery On" /* Enable UNDO */
"ISREDIT Nosave " /* Enable UNDO */
"ISREDIT (qfdsn) = DATASET" /* get library name */
"ISREDIT (qmemb) = MEMBER" /* get Member name */
If (Qmemb <> 'QMEMB') Then Do /* meber of pds? */
Qfdsn = qfdsn||'('||Qmemb||')' /* create full dsn */
end
"ISREDIT FIND 'JCLLIB' first" /* locate in jcl */
If (Rc > 0) Then do /* not found? */
say SA0001E qfdsn
exit /* tell & exit */
end /* of not found */
"ISREDIT (TextLine) = LINE .ZCSR" /* Get Line number */
Qvardsn = Substr(TextLine,Pos('ORDER=',TextLine)+6)
"ISREDIT FIND 'INCLUDE' first" /* locate in jcl */
If (Rc > 0) Then do /* Not found? */
say SA0002E qfdsn
exit /* Tell & Exit */
end /* of RC>0 */
"ISREDIT (TextLine) = LINE .ZCSR" /* Get text in line */
Qvardsn = Strip(Qvardsn)||'('||, /* Build dsn of set */
Strip(Substr(TextLine,Pos('MEMBER=',TextLine)+7))||')'
ADDRESS TSO /* switch to tso */
"Alloc f(QSETUP) da("||Qvardsn||") shr reuse"
"EXECIO * DISKR QSETUP (FINIS STEM QSETUP."
Qindx = 0
Do While (Qindx < Qsetup.0)
Qindx = Qindx + 1
TextLine = Qsetup.Qindx
If (Substr(TextLine,1,3) = '//*') Then Do
Iterate
end
TextLine = Translate(textline,' ','=')
Cindx = Cindx + 1
Csetup.Cindx.Var = '&'||Word(Textline,3)
Csetup.Cindx.Val = Word(Textline,4)
/* say 'var=' Csetup.Cindx.Var
Say 'Val=' Csetup.Cindx.Val */
end
Address ispexec /* switch back to member */
"isredit (lastline) = LINENUM .zlast"
Qindx = 0
Do While (Qindx < LastLine)
Qindx = Qindx + 1
"ISREDIT (TextLine) = LINE " Qindx
If (Substr(TextLine,1,1) = '/') Then do
If (SIFlag > 0) Then Do
"ISREDIT LABEL " Qindx-1 "=" ".E"||,
Substr(LabelStr,LIndx,1)
say ".E"||,
Substr(LabelStr,LIndx,1)
Say 'end label at line' Qindx-1
SIFlag = -1
Iterate
end
SIFlag = 0
Iterate
End
If (SIFlag < 1) Then Do
LIndx = LIndx + 1
"ISREDIT LABEL " Qindx " = " ".S"||Substr(LabelStr,LIndx,1)
Say 'start label at line' Qindx
end
SIFlag = SIFlag + 1
End
exit
Cindx = 0
Tindx = 0
ChngCnt = 0
Do while (Cindx < Csetup)
Cindx = Cindx + 1
CmdVar = Csetup.Cindx.Var
CmdVal = Csetup.Cindx.Var
Do while (Tindx < LIndx)
Tindx = Tindx + 1
SLabel = ".S"||Substr(LabStr,Tindx,1)
ELabel = ".E"||Substr(LabStr,Tindx,1)
"isredit change " CmdVar CmdVal " ALL " Slabel Elabel
If (Rc = 0) then do
ChngCnt = ChngCnt + 1
End
End
End
/* undo changes
CIndx = 0
Do While (Cindx < ChngCnt)
Cindx = Cindx + 1
"ISREDIT UNDO"
End */
Say "That All folks"
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

