REXX Snippets#
Script skeleton#
/* REXX - My script description */
address TSO
arg parm1 parm2
if parm1 = '' then do
say 'Usage: EX MYSCRIPT parm1 parm2'
exit 8
end
say 'Processing:' parm1
exit 0
Variables and strings#
name = 'Jay'
count = 42
pi = 3.14159
/* Concatenation */
msg = 'Hello,' name'!' /* Hello, Jay! */
msg = 'Hello,' || name || '!' /* explicit concat */
/* Substring */
s = 'ABCDEFGH'
say substr(s, 3, 4) /* CDEF */
say left(s, 3) /* ABC */
say right(s, 3) /* FGH */
/* Length, pos, upper */
say length(s) /* 8 */
say pos('DEF', s) /* 4 */
say translate(s) /* uppercase */
Conditionals & loops#
/* IF/THEN/ELSE */
if rc = 0 then
say 'OK'
else if rc = 4 then
say 'Warning'
else do
say 'Error RC='rc
exit rc
end
/* DO loop */
do i = 1 to 10
say i
end
/* DO WHILE */
do while condition
...
end
/* DO UNTIL */
do until rc <> 0
...
end
/* DO FOREVER */
do forever
if done then leave
end
/* SELECT (case) */
select
when rc = 0 then say 'OK'
when rc = 4 then say 'Warning'
otherwise say 'Error' rc
end
TSO commands from REXX#
/* Issue TSO command */
address TSO "LISTCAT ENT('MY.*.DATA')"
/* Allocate a file */
address TSO "ALLOC DA('MY.FILE') SHR"
/* Submit job */
address TSO "SUBMIT 'MY.JCL(MYJOB)'"
/* Check return code */
address TSO "LISTCAT ENT('MY.DATA') ALL"
if rc > 0 then say 'Dataset not found, RC='rc
Read a dataset line by line#
/* REXX - Read and process a sequential dataset */
address TSO "ALLOC F(INFILE) DA('MY.INPUT.FILE') SHR REUSE"
do while lines('//DD:INFILE') > 0
line = linein('//DD:INFILE')
if left(line,1) = '*' then iterate /* skip comments */
say 'Processing:' line
end
address TSO "FREE F(INFILE)"
Write a dataset#
address TSO "ALLOC F(OUTFILE) DA('MY.OUTPUT') SHR REUSE"
call lineout '//DD:OUTFILE', 'Header line'
call lineout '//DD:OUTFILE', 'Data line 1'
call lineout '//DD:OUTFILE', 'Data line 2'
call lineout '//DD:OUTFILE' /* flush/close */
address TSO "FREE F(OUTFILE)"
Call ISPF services#
address ISPEXEC
/* Display a panel */
"DISPLAY PANEL(MYPANEL)"
/* Set/get dialog variables */
"VPUT (VAR1 VAR2) SHARED"
"VGET (VAR1 VAR2) SHARED"
/* Edit a dataset */
"EDIT DATASET('MY.SOURCE.LIB(MYMEMBER)')"
/* Browse */
"BROWSE DATASET('MY.OUTPUT.FILE')"