You are on page 1of 97

REXX

Saravanan Desingh

REXX

An abbreviation of IBMs Restructured EXtended eXecutor (REXX) Language, which allows system command to be used or combined in a routine.

Topics

1 REXX ENVIRONMENT 2 CODING PROGRAM & DATA INSTRUCTIONS

3 DEBUGGING & STORAGE FACILITIES


4 REXX AS A COMMAND LANGUAGE

1. REXX ENVIRONMENT

1.1

Creating a REXX program.

1.2

Coding Simple variables and Expressions

1.3

Using Built-in functions

1.1 Creating a REXX program


1.1.1 Beginning a REXX Program and using comments

1.1.2 Structuring a REXX Program

1.1.3 Using Basic Terminal I/O

1.1.4 Running a REXX Program

1.1.1 Beginning a REXX program and using comments

Start with Keyword REXX Comments /* and */

1.1.2 Structuring a REXX program

Free-Formatted Language

A Space to separate the arguments


Not Case-Sensitive

1.1.2 Structuring a REXX program

; Separate 2 Instructions

, Continue an Instruction

1.1.3 Basic terminal input and output instruction

SAY Display Text on Screen PULL Retrieves User Input

1.1.4 How to Run a REXX program?

Explicit Command
TSO Environment exec DSN exec Implicit Command SYSPROC or SYSEXEC TSO member-name

1.2 Coding Simple variables and Expressions

1.2.1 1.2.2 1.2.3 1.2.4 1.2.5

Using Dynamic Typing Assigning simple variable Using Character String Expressions and Operations Using Arithmetic Expressions and Operations Using Logical Expression and Operations

1.2.1 Using Dynamic Typing

Implicit Defining of Variables

Defined Dynamically

1.2.2 Assigning simple variables

Variable Characteristics:
Length 1 to 255 characters

A-Z, a-z, 0-9


!,@,#,$,?,_ Should not begin with Digits

1.2.3 Using Character String Expressions and Operations

All Constants & Variables referred as Alphanumeric Character Strings. Character Strings - and
Concatenation - ||

1.2.4 Using Arithmetic Expressions and Operations

Denoted with or without Quotes 12,12.0,12.00 Arithmetic Operators +,-,*,/

1.2.5 Using Logical Expressions and Operations

=
> <

== (Identical to)
& | \ (Not)

1.3 Using Built-in functions

1.3.1 1.3.2 1.3.3 1.3.4

Using string manipulation function Formatting numbers Using Arithmetic Functions Using Miscellaneous functions

1.3.1 Using String Manipulation Functions

LENGTH(string)
No.of characters in the string LEFT(string,no.of chars)

Isolate a string within a string


SUBSTR(string,startpos,no.of chars) RIGHT(string,no.of chars)

1.3.1 Using String Manipulation Functions

POS(lookfor,seach)

INDEX(search,lookfor)
searches one string (search) to see if another string (lookfor) is contained in it

1.3.2 Formatting Numbers

FORMAT(nn,ninteger,ndecimal)
nn - Number or numeric expression to format ninterger-Number of digits or blanks to the left of the decimal point. ndecimal-Number of places to the right of the decimal point Ex: A=123.44 FORMAT(A,3,1)=123.4

1.3.2 Formatting Numbers

TRUNC(number,numberofplaces)
Ex:

TRUNC(56.7777,1)=56.7

1.3.3 Using Arithmetic Functions

DATATYPE(variable) NUM

CHAR

1.3.3 Using Arithmetic Functions

Additional Function:
ABS(n) MAX(n1, n2, n3...)

MIN(n1, n2, n3.)


RANDOM(low, high) SIGN(n) -1, 0 , 1

1.3.4 Using Miscellaneous Function

USERID() TIME() Format hh:mm:ss

DATE()
DATE(J) DATE(U)

Format dd mmm yyyy


Format yyddd Format mm/dd/yy

2 CODING PROGRAM & DATA INSTRUCTIONS


2.1 Using Compound variables

2.2

Coding Conditional and Looping Constructs

2.3

Implementing Subroutines, Procedures, and Functions

2.4

Parsing Data

2.1 Using Compound variables


Implementing Arrays and Records Stem No. of Elements Maximum Variable Name Length - 250 Characters Mixed types and Lengths Ex: arr.1=25

arr.2=Steeple-Reach Building

Initialize array:
array.=0 arr.=

Single and Multi dimension array.


Ex:

single.var matrix.row.col

Compound Variables can be used as Data Structures. Ex: emprec.empname=Bharath

emprec.empno=5508
emprec.sex=M Record like structure.

2.2 Coding Conditional and Looping Constructs

2.2.1 2.2.2 2.2.3 2.2.4

Using Conditional Constructs and Compound Statements Using Looping Constructs Bypassing and Terminating Loops Branching on errors

2.2.1 Using Conditional constructs and Compound statements

Conditional group:
IF-THEN-ELSE Format:

IF expression THEN
statement ELSE

statement
ELSE optional

2.2.1 Using Conditional constructs and Compound statements

Grouping the statements:

DO-END

Ex: DO

Statement1 Statement2
END

2.2.1 Using Conditional constructs and Compound statements

Selecting several conditions:

SELECT-WHEN-THEN-OTHERWISE

* OTHERWISE optional

2.2.2 Using Looping Constructs

Repeating a sequence of instructions.


Conditional Looping.

DO-WHILE
DO-UNTIL

2.2.2 Using Looping Constructs

Format:
DO WHILE condition Stmts

END
Executes when condition is True.

2.2.2 Using Looping Constructs

Format:
DO UNTIL condition stmts

END
Executes when condition is False.

2.2.2 Using Looping Constructs

Numerically Controlled Repetitive Loop:


Format: DO nooftimes stmts END Ex: DO 5

say It will be displayed for 5 times


END

2.2.2 Using Looping Constructs

Numerically Controlled Repetitive Loop:(Infinite Looping)


Format: DO FOREVER stmts END Ex: DO FOREVER

say Your System is locked by the User


END

2.2.2 Using Looping Constructs

Numerically Controlled Repetitive Loop:


Format: DO var = initial T0 final stmts END Ex: DO I=1 to 10 s=s+I END

2.2.2 Using Looping Constructs

BY Clause:
Additional variations.

Ex:
DO I=1 T0 99 BY 2 SUM=SUM+I

END
I will have the values 1,3,5,99

2.2.2 Using Looping Constructs

FOR Clause:
Controls Maximum no. of Execution.

Ex:

DO I=0 BY 5 FOR 20 SAY I END I will have the values 0,5,10,..95

2.2.2 Using Looping Constructs

Nested Looping:

DO
DO . END END

2.2.3 Bypassing and Terminating Loops


LEAVE: Ex: DO FOREVER SAY Enter a String (Exit : X) Terminating explicitly.

PULL STR
IF STR == X THEN LEAVE ELSE SAY STR END

2.2.3 Bypassing and Terminating Loops

ITERATE:
Ex: DO count = 1 TO 10 IF count = 8 THEN ITERATE ELSE SAY 'Number' count END Bypass instructions.

2.2.4 Branching on Errors

SIGNAL:
Ex: IF RC\=0 THEN

SIGNAL handle-error
. handle-error: .

2.3 Implementing Subroutines, Procedures, and Functions

2.3.1 Defining Subroutines, Procedures and Functions

2.3.2 Using Subroutines

2.3.3 Using Procedures

2.3.4 Using Functions

2.3.1 Defining Subroutines, Procedures, and Functions

In REXX, use a

Subroutine for a simple branch and return within a program. All main program variables are available to a subroutine.

2.3.1 Defining Subroutines, Procedures, and Functions

In REXX, use a

Procedures the same way as you use a subroutine, but use it when you need a routine with its own local variables hidden from the main program.

2.3.1 Defining Subroutines, Procedures, and Functions

In REXX, use a

Functions to return data to use in the main program. REXX allows functions to either access main program variables or local variables.

2.3.2 Using Subroutines

Main pgm,

..
CALL subrtn

EXIT
subrtn:

..
RETURN

2.3.3 Using Procedures

Main pgm,

..
CALL subrtn ...

EXIT
subrtn: PROCEDURE ..

RETURN

2.3.3 Using Procedures


Ex: i=4 call num say i num: PROCEDURE i=3 RETURN

Output is 4.

2.3.3 Using Procedures


EXPOSE:

To expose caller Variables.


Format:
ProcName: PROCEDURE EXPOSE arg1 arg2

Argument variables can be constants, expressions or variables

2.3.3 Using Procedures


Ex: n1=5 n2=4 avg=0 call calc

say avg
calc: PROCEDURE EXPOSE n1 n2 avg avg=(n1+n2)/2 RETURN

2.3.3 Using Procedures


To pass value, code

A CALL with up to 20 Arguments.

The ARG, PARSE UPPER ARG and PARSE ARG instruction as the first line in the PROCEDURE.

2.3.3 Using Procedures


Ex:

CALL exproc name1 ecode1


exproc: PROCEDURE

ARG name2 ecode2


say name2 say ecode2

RETURN

2.3.3 Using Procedures


RESULT:

Last value returned from the Procedure or Subroutine Ex:


RETURN 10 - 10 is assigned to RESULT.

2.3.4 Using Functions

User-defined Functions:
Like Built-in function. Substitutes Expressions.

Subroutines or Procedures returns a value can be used as function


Format:

FunctionName()

2.3.4 Using Functions

Ex:
n1=1 n2=2

say average(n1 n2)


average:PROCEDURE

ARG n1 n2
RETURN (n1+n2)/2

2.4 Parsing Data

2.4.1 Parsing from Terminal Input and Passed Values

2.4.2 Using Additional Parsing Instructions

2.4.1 Parsing from terminal input

Format:

PULL var

or
PARSE UPPER PULL var

2.4.1 Parsing from terminal input

PULL var1 var2

PARSE UPPER PULL var1 var2..

PARSE PULL var1 var2..

2.4.1 Parsing from passed values

Receiving data from the another routine


Format: ARG var1 var2..

or
PARSE UPPER ARG var1 var2 .. Without converting to uppercase, PARSE ARG var1 var2

2.4.2 Using additional Parsing Instructions

PARSE VAR varname var1 var2

PARSE VALUE expression WITH var1 var2..

2.4.2 Using additional Parsing Instructions

Ex:
PARSE VALUE hello || world, WITH var1 var2 Var1=hello Var2=world

To Trap and disregard dummy words

PARSE VALUE This is a REXX program WITH var1 . . var2 .


Var1=This Var2=REXX

PARSE VALUE Hi , Everybody WITH var1 , var2 Var1=Hi

Var2= Everybody

3 DEBUGGING & STORAGE FACILITIES

3.1

Processing Data on a Stack

3.2

Manipulating Data sets

3.3

Debugging with REXX Facilities

3.1 Processing Data on a Stack

3.1.1 Defining the stack

3.1.2 Implementing LIFO and FIFO lists with the stack

3.1.1 Defining the stack

Storage Facility in Memory for lists of Data.

Access is Sequential.

3.1.2 Implementing LIFO and FIFO lists with the stack

LIFO- Last In First Out


FIFO- First In First Out Default is LIFO

3.1.2 Implementing LIFO and FIFO lists with the stack

PUSH:

To implement a LIFO list on the stack,

PUSH expression

3.1.2 Implementing LIFO and FIFO lists with the stack

PULL:
As long as the stack contains data lines, PULL accesses the stack. When the stack is empty, PULL accesses the keyboard. PULL var QUEUE:

To implement a FIFO list on the stack,


QUEUE expression

3.1.2 Implementing LIFO and FIFO lists with the stack

QUEUED():

Built-in function used to determine the no. of items in the stack.

n=QUEUED()

3.2 Manipulating Data sets

3.2.1 Reading information from Data sets

3.2.2 Writing information to Datasets

3.2.3 Updating Data sets

ALLOC allocation

EXECIO input/output operations

3.2.1 Reading information from data sets

Allocate dataset to a file.

ALLOC F(file) DA(DSN) SHR REUSE

file -> Logical File DSN-> Physical File

3.2.1 Reading information from data sets

Read data into a stack or an array using EXECIO with the DISKR option.
EXECIO * DISKR file(FINIS using stack EXECIO * DISKR file(STEM arr. FINIS using array

* - all lines.
FINIS- close dataset after processing

3.2.1 Reading information from data sets

EXECIO nooflines DISKR file startlineno (FINIS


nooflines no. of lines to read. Startlineno - starting line to read.

Ex: EXECIO 10 DISKR file 100(FINIS

3.2.1 Reading information from data sets

stack:
EXECIO * DISKR file(LIFO FINIS -PUSH command

EXECIO * DISKR file(FIFO FINIS -QUEUE command

- Default is FIFO.

3.2.2 Writing information to data sets

DISKW in EXECIO

Stack:
EXECIO will continue to pull from the stack until it locates a null line.

3.2.3 Updating a data sets

DISKRU:
Disk read for updating.

Ex:
EXECIO 1 DISKRU file(LIFO

3.3 Debugging with REXX Facilities

3.3.1 Tracing Program Flow

3.3.2 Using Special Variables

3.3.1 Tracing Program Flow

TRACE:
Initiate trace from REXX

TRACE C Commands
TRACE R - Results TRACE E - Errors TRACE N - Normal

3.3.1 Tracing Program Flow

Interactive Tracing:

TRACE ?option

option- C,R or E.

3.3.2 Using Special Variables

SIGL (Signal Line):

Whenever control transfers within a REXX program (usually due to CALL, SIGNAL, or a Function call), SIGL is set to the line number where the branch occurred.

3.3.2 Using Special Variables

Ex:
000003 000004 000005 000006 subrtn: 000007 000008 say This is call from line SIGL RETURN CALL subrtn EXIT

O/p:

This is call from line 3

3.3.2 Using Special Variables

RC (Return Code):

Retains the return code of the REXX command executed last.

Ex:
EXECIO * DISKR f1(FINIS readcode=RC

3.3.2 Using Special Variables

SIGNAL ON ERROR:

Any subsequent nonzero RC cause control to pass to a subroutine named ERROR.

3.3.2 Using Special Variables

SIGNAL ON ERROR:

Ex:
SIGNAL ON ERROR

..
ERROR:

Say Error no. RC occurred at line SIGL


EXIT

4 REXX AS A COMMAND LANGUAGE

4.1

Interacting with the Command Host Environment

4.2

Interacting with TSO/E

4.1 Interacting with the Command Host Environment

Directing Commands to the Command Host Environment

To change the command Host Environment for all subsequent commands, use the format,

ADDRESS environment
Environments: MVS, TSO, ISPEXEC, ISREDIT, LINK, ATTACH, or NETVIEW. Ex: address MVS

Verify Environment:

Format:

SUBCOM environment
Sets RC to zero if the environment is present, else set to one.

4.2 Interacting with TSO/E

4.2.1

TSO Commands

4.2.2

Using OUTTRAP to Pass Data

4.2.1 TSO Commands

Commonly used TSO Commands


ALLOCATE

DELETE
DSAT EXEC LISTDS

4.2.2 Using OUTTRAP to pass Data

Traps the output of the subsequent commands and places the trapped lines into an array
Format:

OUTTRAP(stem.,Maxnoof lines)
command Ex:

OUTTRAP(output.,5)

THE END