© 2004 IBM Corporation
IBM ^
z/VMModule 6: The REXX Programming Language
© 2004 IBM Corporation
IBM ^
Module Objectives
Data structures IF-THEN-ELSE SELECT LOOPS
Data formats An example of formatting numbers and strings are:
– FORMAT( ) numerical– SUBSTR( ) string manipulation
Input/Output (I/O) functions STREAM( ) function CHARIN, LINEIN, CHAROUT, LINEOUT instructions
Parameters To retrieve parameters use:
– ARG, PULL, etc.
© 2004 IBM Corporation
IBM ^
Objectives
Describe REXX and how it works with z/VM Describe how to write REXX programs using:
Comments
Keywords and literal strings
Clauses
Syntax error messages Explain the use of REXX variables with names, values, and
assignments
© 2004 IBM Corporation
IBM ^
Objectives continued
Understand which expressions can be used within a REXX clause: Operators and terms Comparisons (equal, and, or) Functions
Learn the control statements for manipulating data flow: IF – THEN ELSE keyword DO LOOPS (repetitive and conditional) Selection
© 2004 IBM Corporation
IBM ^
Objectives continued
Explain arithmetic, text, and conversational expressions for manipulating and gathering data
Show how to issue CMS and CP commands within a REXX EXEC
Explain the subcommands and macros used in REXX EXECs Introduce REXX subroutines
© 2004 IBM Corporation
IBM ^
What is REXX?
REstructured eXtended eXecutor language A versatile, easy to use, structured programming language A programming language that is easy for both computer
professionals and general users to learn and use A compiler can be used to translate REXX source programs
into compiled programs
© 2004 IBM Corporation
IBM ^
Features of REXX
Ease of use Free format Interpreted Built-in functions Parsing capabilities Powerful debugger Relationship with z/VM
© 2004 IBM Corporation
IBM ^
How a Program Works
A REXX program is a list of instructions, something like a recipe A computer communicates with users through questions displayed
and answers typed in
© 2004 IBM Corporation
IBM ^
Comments in REXX Programs
Comments in programs:•/* . . . */, this is used for descriptions and explanations
Comments with special meaning to CMS•To determine you are writing a REXX program the first line must contain /* . . . */
© 2004 IBM Corporation
IBM ^
Keywords and Literal Strings
Keywords are instructions that describe an action, such as PULL, IF, and SAY.
REXX reads each individual clause, then processes it before going on to the next (interpreted language).
A literal string is a set of characters bounded by quotation marks.
REXX processes a clause containing a variable by substituting the variable name with the stored data.
© 2004 IBM Corporation
IBM ^
REXX Clauses
REXX programs consist of these types of clauses:•Instruction
•Assignment
•Label
•Null
•Commands
© 2004 IBM Corporation
IBM ^
REXX Syntax Errors
© 2004 IBM Corporation
IBM ^
REXX Variables
© 2004 IBM Corporation
IBM ^
Names, Values, and Assignments
Information stored in a variable is called its value. It is possible to make variable names anything, but a good idea
to create meaningful names. An instruction that stores a value in a variable or changes its
value is called an assignment.• In formal terms, the syntax might look like this:
• symbol = expression
© 2004 IBM Corporation
IBM ^
Other Assignments
The PULL instruction: Pauses the running program to allow the user to enter data
Can be used to pull in each piece of data or allow the user to enter multiple amounts of data separated by spaces
The ARG instruction: Like PULL, but data items are entered at the command prompt
with the program name
© 2004 IBM Corporation
IBM ^
Assignments and Instructions
One way to write this EXEC is:/* SUBMUL1 EXEC */
ARG first second
say first “-” second “=” first-second
say first “*” second “=” first*second Another way to write this EXEC is:
/* SUBMUL2 EXEC */
say “Enter two numbers to multiply and subtract.”
pull first second
say first “-” second “=” first-second
say first “*” second “=” first*second
© 2004 IBM Corporation
IBM ^
REXX Expressions
Operators and terms: Operators include +, -, /, %, *, ||
Operators manipulate numbers, strings in quotes, variables, results from function calls and evaluated expressions
Parentheses: The language processor evaluates the expression inside the
parentheses first
• The value of 10 * ( 3 || 4 ) is: 340
© 2004 IBM Corporation
IBM ^
REXX Expressions (Comparison, True, and False)
Comparisons:– > Greater than– = Equal– < Less than
TRUE, the computed result is 1– say 4 < 7
• /* represents a “1”, which means TRUE */ FALSE, the computed result is 0
– say “Chalk” = “Cheese”• /* represents a “0”, which meaning FALSE */
© 2004 IBM Corporation
IBM ^
REXX Expressions ( =, &, | )
The equal sign (=) can have two meanings– Can be an assignment if found at the beginning after the symbol– An equal sign anywhere else stands for the comparison operator
Use the AND (&) operator to write an expression that is true when everything else is also true
Use the OR (|) operator when any part of an expression can be true
© 2004 IBM Corporation
IBM ^
REXX Functions
Function calls can be written anywhere in an expression. The function performs the computation named by the function
and returns the result. When the value of the function has been calculated, the result
is put back into the expression in place of the function call.– An example is:
• say 7 + HALF(6) /* becomes 7 + 3 which says “10” */
© 2004 IBM Corporation
IBM ^
Control Statements: IF – THEN
© 2004 IBM Corporation
IBM ^
Examples and Notes: IF - THEN
The THEN instruction may be an assignment, command, or keyword. The NOP instruction can be used when no operations are necessary. An important property of the THEN keyword is that is does not need to
start a clause, therefore a semicolon is not needed. Another example is:
If answer=‘YES’ then say ‘OK!’; else say ‘Why not?’
© 2004 IBM Corporation
IBM ^
Control Statements: ELSE Keyword
© 2004 IBM Corporation
IBM ^
REXX Loops
© 2004 IBM Corporation
IBM ^
Repetitive DO Loops
© 2004 IBM Corporation
IBM ^
Conditional DO Loops
Conditional loops continue to be executed as long as some condition is satisfied.
The simplest way to code these loops is to use DO FOREVER and LEAVE instructions.
© 2004 IBM Corporation
IBM ^
Conditional Loops: The Choice
There are three kinds of Conditional Loops The decision is made before processing starts
– Checking occurs before entering the loop and continues after each iteration.
The decision is made after the first pass through the loop and again after every subsequent pass.
– Data is requested for the user. The decision is made during each pass.
– The decision to leave might depend on information obtained during the loop.
© 2004 IBM Corporation
IBM ^
The SELECT Instruction
© 2004 IBM Corporation
IBM ^
A SELECT Instruction
SELECTWHEN morning THEN DO
say “Take shower”say “Eat breakfast.”say “Get ready for work.”end
WHEN afternoon THEN DO until ans=Ysay “Did you eat lunch? (Y/N)PARSE UPPER PULL ansend
otherwise say “It is in the evening -- get ready for bed!!”end
© 2004 IBM Corporation
IBM ^
Arithmetic
The addition, subtraction and multiplication operations are performed in the usual way.
– + Addition– - Subtraction– * Multiplication– ** Power function
The result of a % operation is the whole number portion. The remainder is dropped.
The result of a // operation is the remainder portion. The whole number is dropped.
The result of a / operator is a combination of both operations above.
© 2004 IBM Corporation
IBM ^
Text - Concatenation
© 2004 IBM Corporation
IBM ^
Text – String Manipulation
SUBSTR() Function: To select a part of a string to use:
– WORD = “reveal”
– say substr(WORD, 2, 3) /* says “eve” */ LENGTH() Function:
To find out the length of a REXX variable:
– WORD = "reveal"
– say length(WORD) /* says "6" */
© 2004 IBM Corporation
IBM ^
Text – String Manipulation continued
COPIES(): Produces a number of copies of the string. The arguments are:
• The string to be copied• The number of copies required
LEFT(): Obtains a string that is padded or truncated on the right
RIGHT(): Obtains a string that is padded or truncated on the left
© 2004 IBM Corporation
IBM ^
Conversations – SAY and PULL
The SAY instruction and its expression are computed and the result is displayed as a new line on the screen.
The PULL instruction is able to collect an answer that has been displayed by the SAY instruction.
The PARSE PULL instruction brings in the data just as it is, without converting the lowercase letters to uppercase.
The UPPER instruction translates the value of one or more variables to uppercase.
© 2004 IBM Corporation
IBM ^
Conversation – Parsing Words
PULL can also fetch each word into a different variable Using the period as a place holder in this statement (PULL . .
lastname .) means to discard the first two words and assign the third word to lastname.
© 2004 IBM Corporation
IBM ^
Issuing Commands to CMS and CP
The language processor can operate in a number of environments. Use quotes to avoid errors when writing CMS and CP commands
within REXX.
© 2004 IBM Corporation
IBM ^
Issuing Commands – Return Codes
More examples: 1) access 591 591
DMSACC113S B(591) not attached or invalid device address
Ready (00100); 2) copyfile profile exec a = = b (for luck
Invalid parameter LUCK in the option FOR fieldReady (00024);
3) erase junk execFile JUNK EXEC A not foundReady (00028)
© 2004 IBM Corporation
IBM ^
Why Use a Compiler?
Advantages of compiling REXX EXECSSource can be hidden from end usersLoad modules are loaded into memory faster
Compile programs using this CMS command:REXXD [source-file-identifier]
© 2004 IBM Corporation
IBM ^
How to Use the Compiler
© 2004 IBM Corporation
IBM ^
XEDIT Subcommands and Macros
The first word on the command line is assumed to be a subcommand Words that are not subcommands are interpreted as macros
© 2004 IBM Corporation
IBM ^
Subroutines
© 2004 IBM Corporation
IBM ^
Conclusion
REXX was created as a procedural language that allows programs and algorithms to be written in a clear and structured way.
Topics in this module: Comments Clauses Variables Expressions Control statements:
– IF THEN– ELSE– Loops – Selection
© 2004 IBM Corporation
IBM ^
Glossary
Clause – a line of code or a statement within a REXX programParsing – manipulates character strings to let your program read
and separate characters, number, and mixed inputsPL/I – was developed as the universal programming language,
where definitions were not needed
© 2004 IBM Corporation
IBM ^
Glossary
REXX – REstrutured eXtneded eXecutor language, a versatile, easy to use structured programming language that is an integral part of z/VM.
REXXCompiler – translates REXX source programs into compiled programs. (Compiled programs run much faster than interpreted programs.)
© 2004 IBM Corporation
IBM ^
References
z/VM: REXX/VM User’s Guide –Version 3 Release 1.0 SC24-5962-00
The REXX Language: A Practical Approach to Programming –by Michael Cowlishaw
Website: Rexx Language Association