Consider the following situation: When editing a dataset in ISPF-edit, you want to execute the RXS program myrxs. Myrxs exists on the ISPRLIB library in the TSO session.
Writing in the command line:
==> tso rxs myrxs
and pressing enter, the program myrxs is executed
Writing
==> rxs |myrxs
and pressing enter, the program myrxs is executed too. Execution this way opens the following possibilities in myrxs:
In the program you may read the queue edit_screen. This queue contains all lines in the edit dataset on the screen - in the state as currently seen on the screen. COBOL line numbers are ignored; linie-numbers in col 73-80 are ignored if record-length is 80.
The following special situations exists:
Format and blocksize for the stdout dataset will be copied from the dataset underlying the edit session
Due to an oddity in REXX (that is in fact, an oddity in EBCDIC) the | above is to be replaced by an ! when using a keyboard from a nordic country, France, Germany, Austria and Italy
Example 37.1: myrxs contains:
)action in='edit_screen'
)& start=1
if start = 1 then do
xx = change('yrsa', 'hugo', unit.1, 'first')
xx
if xx <> unit.1 then start = 0 /* if a change has occured */
end
else do
unit.1
end
)endaction
If command ==> rxs |myrxs is fired, the first occurence of the string 'yrsa' is changed to 'hugo'. The changed dataset is written to <userid>.rxs.data
Example 37.2: myrxs contains:
)action in='edit_screen'
)& func='sql'
sqlvalues
)endaction
If the edit screen contains some SQL, writing ==> rxs |myrxs will execute this SQL. If the execution creates output, the rows will be shown in a new edit screen.
Example 37.3
)action in='ourqualif.ourdsn' /* a partitioned dataset */
)& out='q1'
mbr = unit.1
"edit dataset('ourqualif.ourdsn("mbr")') macro(mymacro)"
)action in='q1'
)& address='ispexec'
unit.1
)endaction
dropqueue('q1')
)endaction
ISPF macro 'mymacro' is executed on all members in dataset 'ourqualif.ourdsn'.
'Mymacro' could be:
/* REXX */
address isredit
"macro"
"change 'yrsa' 'hugo' first"
"end"
Resulting in a change of 'yrsa' to 'hugo' in first occurence in each member.'Mymacro' must be a member on a dataset allocated to SYSPROC in the ISPF session.
Example 37.4
)action in='edit_screen'
)& cnt=0
if pos(' IF ', unit.1) > 0 then do
cnt = cnt + 1
cnt unit.1
end
if pos('END-IF', unit.1) > 0 then do
cnt = cnt - 1
cnt unit.1
end
if pos('SECTION', unit.1) > 0 then do
unit.1
end
)endaction
This coding will trace any un-balance in IF / END-IF in a COBOL program.