Title: Golden Rules of Locking
1Free Rexx !
Everything You Ever Wanted to Know About Rexx
(but were afraid to ask)
Howard Fosdick (C) 2005 FCI
2- Independent consultant DBA / SA for
- Oracle, DB2, SQL Server
- Linux, Unix, Windows
- Founder IDUG, MWDUG, CAMP
- Author Rexx Programmers Reference
Contact hfosdick_at_compuserve.com
3- All languages have their strengths roles
- Not here to put down other languages
- Here to present Rexxs strengths and
- discuss where it fits in your toolbox
(1) Know where Rexx fits (2) Teach you to
script it in
Goals
4- Why Scripting ?
- Why Rexx ?
- Rexx Tutorial
- Further Info
5I. Why Scripting ?
6- 2 Big Software Trends Converge
Ka-Boom!
Free and Open Source
Scripting
Perl, Python, Rexx, Tcl/Tk, Bash, Korn, Ruby, ot
hers
Java, C/C, COBOL
Visual Basic, VBScript, WSH
7Whats a Scripting Language ?
Rexx
- General purpose
- Free / open source
- Universal
- Portable code
- Transferable skills
- Standardized
- (8 of 9 free Rexxes meet stds)
- Dynamic
- Sizing (variables arrays)
- Memory management
- No variable declarations
- No data typing
- Integrated debugger
- Interpreted
- High-level
- Glue language
8- Scripting Vs. Traditional Languages
Scripting
Traditional
-- Lower level -- Compiled -- More
detail-oriented -- Manual variable management --
Pre-declared variables -- More programmer
effort -- Coding languages -- Optimize
execution speed
-- High level -- Interpretive -- More
productive -- Varying degrees of automatic
variable management -- Shifts burden to the
machine -- Glue languages -- Acceptable
execution speed
Rexx, Perl, Python, Tcl/Tk, Ruby, others
C/C, COBOL, Java, Pascal, others
9When to Use Rexx
No
Yes
-- Productivity -- Reliability -- Quick
development -- Glue language -- Prototyping --
Systems administration -- OS extensions --
Portable apps -- Mainframe migrations -- Embedded
programming -- Handhelds -- Text processing --
Interactive development /
debugging
-- Optimal execution speed is required --
Systems -level programming (No BIOS
interrupts, direct addressing, etc.)
10Performance
3M
Ratio of compiler to interpreter speed remains
constant while processor speeds
increase exponentially
200k
10k
4k
70
Year-- 1981 1988
1993 1998 2005 Mhz--
4.77 8
66 266 3 ghz
CPU-- 8088 386
486 PII PIV
11II. Why Rexx ?
12- Why Rexx Vs Other Scripting Languages ?
Easy but Powerful
Easy but Powerful
Ease of use benefits experienced developers ...
- FAST coding !
- Reliable code
- Easy to code right out of memory
- Maintainable code
- 70 of IT does maintenance
- This determines your codes longevity
- Saves your company
13Why Rexx Vs Other Scripting Languages ?
Power
Simplicity
Conflict !
Rexx uses specific technologies to tie them
together
14- Power Through Simplicity by
- Small instruction set, w/ power in the
functions - Extensible
- Call external functions just like internal
- Glue language (uses OS commands, interfaces,
- DLLs, shared libraries, services,
objects, etc.) - Minimal syntax
- Minimal special characters, variables, etc.
- Automated memory management
- Automated variable management
- No data definitions
- No data typing
- Dynamic array sizes
- Dynamic string or variable lengths
15Rexx presents a radically different philosophy on
how to achieve power than the Unix tradition
languages (Perl, Bash, Korn, Awk, etc.)
Rexx presents a unique scripting paradigm.
16The Language Structure Makes Rexx Easy
Operators Arithmetic Comparison
Logical String
2 dozen Instructions
Learn from the inside out
70 Built-in Functions
Other Features
OS commands, external functions, DLLs, APIs,
widgets, etc.
17Linux-- all versions Unix-- all
versions BSD-- all versions Windows-- all
versions Mac OS-- all versions DOS all
versions (32- and 16- bit) Handhelds-- Windows
CE, Palm OS, Symbian/EPOC32 Embedded-- Embedde
d Linux, DOS, Windows variants Mainframes--
OS, VM, VSE (all versions) IBM
mid-range-- i5/OS, OS/400 (all versions) Many
others-- Amiga OS, AROS, OpenVMS, BeOS,
OpenEdition,
AtheOS/Syllable, SkyOS,
QNX (QNX4/QNX6), OS/2, eCS, osFree, more
Rexx predominates on systems in red
18The Free Rexx Interpreters
BRexx
Regina
Rexx/imc
Windows, DOS (32/16 bit), Windows CE, Linux,
Unix, Mac OS, others
All major operating systems
Unix, Linux, BSD
Rexx for Palm OS
Reginald
r4
Windows
Palm OS
Windows
Open Object Rexx
OOP extensions
roo!
NetRexx
Any Java Environment
Linux, Windows, Solaris, AIX
Windows
19Rexx Free Tools and Interfaces
- Over 100 free tools for Rexx. Examples
- SQL database access
- GUIs
- XML
- Web programming
- Math libraries
- Regular Expressions
- Code managers
- Communications functions
- OS interface libraries
- Graphics
- Speech, MIDI, sound
- . . . you name it . . .
-
20III. Lets Code !
21Example Script 1
/
/ / Find Payments
/ /
Reads accounts lines one by one, and displays
overdue / / payments (lines
containing the phrase PAYMENT_OVERDUE).
/ /
/ Â arg filein
/ Read the input file name/ Â do
while lines(filein) 0 / Do while
a line to read / Â input_line
linein(filein) / Read an input line
/ Â if pos('PAYMENT_OVERDUE',input_line) 0
then say 'Found it' input_line
/ Write line if overdue / Â end
22- Simplicity in this script
- Minimal syntax
- Minimal special characters and variables
- Free format
- Use spaces blank lines however desired
- Case-insensitive (capitalize however you want)
- No explicit file definition
- File is automatically OPENed and CLOSEd
- Automatic declaration of variables
- (see FILEIN and INPUT_LINE)
- No data typing
- All variables are strings
- Numbers are strings that look like numbers
- Decimal arithmetic (portable, consistent
results) - Automatic conversions where sensible
23- Is it the number of Lines of Code (LOC) ?
- Can reduce LOC by nesting functions
- But why write a complex fortune-cookie script
?
Power is not solving the problem in the fewest
LOC! Power is a deft script that solves
the problem in a reliable, readable,
maintainable manner
24Example Script 2
arg filein fgrep PAYMENT_OVERDUE filein
This script does the same thing as Example 1
25- The Power of Glue Languages
- Rexx evaluates a statement, sends anything
- that is not Rexx to the external
environment - (by default this is the OS)
- Full power of a string-manipulation language
- to direct external interfaces
- Inspect return code, command output, messages,
- and respond
- Rexx is a glue language
26 Structured Control Instructions
If
If then else
Do End
Do While
Select
Call
(case)
Subroutine or Function
27Un-Structured Control Instructions
Do Until
Do Forever
Iterate
Leave
Signal
(goto)
28- 70 Built-in Functions
- String manipulation (character, bit, hex)
- Word manipulation
- I/O
- Numeric
- Environmental
- Conversion
- Other
- 2 statements access external function library
- Those functions are then coded just like
built-ins
29Example Script 3
/
/ / Code Lookup
/ /
Looks up the area code for the town the user
enters. / /
/ Â area.
'' / Initialize array
entries to null / Â area.CHICAGO 312
/ Define a table of area codes /
area.HOMEWOOD 708 area.EVANSTON 847
 do while town '' / Loop until
user enters null line / Â say 'For which town
do you want the area code?' pull town  if
town '' then do if area.town ''
then say 'Town' town 'is not in my database'
else say 'The area code for' town 'is'
area.town end  end
30- Simplicity in this script
- Array recognized by the period (area.)
- Do not have to declare arrays or predefine
their size - Sets all possible elements to null string
(area. ) - Subscript array by any arbitrary string
- (content-addressable memory or associative
memory) - Arrays can be
- Dense or sparse
- Contain homogenous or heterogeneous elements
- Represent records or C structs
- Expand to size of memory
- Automatic capitalization (pull array element
names) - Can always override Rexxs automation
31Example Script 4
(part I)
/ Find Books
/ / This program
illustrates how arrays may be of any dimension
/ / in retrieving book titles based on
their keyword weightings. / Â keyword. ''
/ Initialize both arrays to all null strings
/ title. '' / The array of keywords
to search for among the book descriptors
/ Â keyword.1 'earth' keyword.2
'computers' keyword.3 'life' keyword.4
'environment' Â / The array of book titles, each
having several descriptors / Â title.1
'Saving Planet Earth' title.1.1 'earth'
title.1.2 'environment' title.1.3
'life' title.2 'Computer Lifeforms'
title.2.1 'life' title.2.2 'computers'
title.2.3 'intelligence' title.3 'Algorithmic
Insanity' title.3.1 'computers' title.3.2
'algorithms' title.3.3 'programming'
32Example Script 4 (part II)
arg weight / Get number keyword matches
required for retrieval / Â say 'For weight of'
weight 'retrieved titles are' / Output header
/ Â do j 1 while title.j ''
/ Look at each book / count 0 do
k 1 while keyword.k '' / Inspect
its keywords / do l 1 while
title.j.l '' / Compute its weight
/ if keyword.k title.j.l then count
count 1 end end  if count
weight then / Display titles matching the
criteria / say title.j end
33- Array keyword. is a lookup table or list
- key/value pairs like Perl or Berkeley DB
- Array title. is a tree
- Trees can be balanced or not
DO I 1 TO n BY m WHILE condition FOR
x DO UNTIL DO FOREVER DO n IF condition
THEN DO . . . END ELSE DO . .
. END
DO
IF
Enclose multiple statements within a DO END pair
34Create Any Data Structure With Rexx Arrays
b.1 b.1.1 b.1.1.1 b.1.1.2 b.2 b.2.1
b.2.2 b.2.3 b.3 b3.1 b.3.1.1 b.3.1.1.1
Element 1
Key 1 Value 1
Key 2 Value 2
Element 2
Key 3 Value 3
Element 3
Key 4 Value 4
A Simple List or Look-up Table
Key-value Pairs
b.1 b.1.1 b.1.2 b.2 b.2.1
b.2.2 b.3 b.3.1 b.3.2
b.1 b.1.1 b.2 b.2.1 b.2.2
b.2.3 b.3 b.4
A Multi-level Tree (unbalanced)
Also linked list, doubly linked list, stack,
queue, dequeue, etc...
Balanced Tree
Un-Balanced Tree
35Example-- Creating a Linked List
list.0 HEAD list.0.next 1 / Define
linked list. / list.1 'a' list.1.next 2
/ You could also / list.2 'b'
list.2.next 3 / create it
/ list.3 TAIL list.3.next TAIL /
dynamically. / call display_linked_list
/ Display the linked list / list.99
'after a, before b' / Add new item in list
/ list.99.next 2 / Point
new item to next / list.1.next 99
/ Point to the new item / call
display_linked_list / Display the
linked list / exit display_linked_list
/ Displays the linked list/ sub 0
do while list.sub.next TAIL say
'Element' list.sub sub list.sub.next
end return
36Why Rexx Vs Other Scripting Languages ?
For a language that lacks data structures, Rexx
sure has a lot of them!
Power thru Simplicity
37IV. More about Rexx
38Rexx Standards
Extensions
TRL-2
ANSI
- 8 of 9 free Rexx interpreters adhere to TRL-2
- ANSI adds little beyond TRL-2
- Most Rexxes offer extensions
- Extensions offer OS-specific stuff and other
niceties
39Rexx Standards
Early 90s
1990
1996
1985
TRL-1
TRL-2
SAA
ANSI
Language Level
4.00
5.00
3.50
40The Evolution of Rexx
Object-oriented Rexx
Early 1980s
Mid 1990s
Standard or Classic Rexx
NetRexx (for Java environments)
41Rexx on Handhelds
Native
DOS Emulation
Interpreter
Interpreter
Windows CE BRexx Palm OS
Rexx for Palm OS Symbian /
EPOC32 Regina
PocketDOS XTM others
BRexx
Integrates with... DOS Services
DOS Applications Many DOS apps
instantly available without any changes
Faster Integrates with native services
42How DOS Emulation Works
Rexx Scripts
Rexx Interpreter
DOS Operating System
DOS Emulator
Native operating system
Each layer runs on top of the one below it
PC Hardware
43Object-Oriented Rexx Means
Classic Rexx
Classes and Methods
PLUS
Inheritance Derivation
Encapsulation
Abstraction
Polymorphism
Huge Class Library
44 Object Rexx Adds to Classic Rexx . . .
Classes and Methods
Complete Object Orientation
Built-in Objects, Special Variables, many other
features
Object Rexx
New Instructions
And Much More
More Functions
New Operators
45NetRexx
- A Rexx-like language
- Brings Rexx ease of use to Java environment
- NetRexx scripts use Java classes
- Script
- Classes for use by Java
- Applets
- Applications
- Servlets
- Java Beans (EJBs)
- Client server side both
46NetRexx Goes Beyond Classic Rexx
Java environment integration
Classic Rexx
Object orientation
New instructions
Changed and Extended with . . .
Data typing (types)
Indexed strings
Special names
Special methods
and much more
47Developing and Running NetRexx Scripts
To translate, compile and run in one step enter
nrc -run hello
Translate NetRexx source into a Java program
Class file Eg hello.class
Source script Eg hello.nrx
Java file Eg hello.java
Compile Java into bytecode
Run
NetRexx interprets and/or compiles. Can generate
commented, formatted Java code. Runs under JVM
or stand-alone.
48V. More Rexx Features
49How Rexx Supports Modularity
Modularity
Internal Routines
External Resources
-- Extensions and Function Libraries --
Operating System Commands -- Commands to other
environments -- External Programs -- API
Interfaces to external features -- API into Rexx
-- Built-in Functions -- Functions you
develop -- Subroutines
50String Processing Operations
abc abc
abcabc
Concatenation
Joins two or more strings
abcabc
Bifurcation
Splits a string
abc abc
abcabc
Parsing
Scans and analyzes a string, may split it into
its constituent
components
Parse Count 2
abcdef
Pattern Matching
Identifies patterns in strings
Find def
51Parsing Operations
Separate by words
By Words
By Pattern
Separate , using , commas
By Numeric Pattern
abc abc abc
Columns 1 5 9
52The Two I/O Modes
Line-oriented Process one line at a
time
Character-oriented Process one
character at a time
linein
charin
charout
lineout
lines
chars
More portable
Reads special characters
53The Stack is both a Stack and a Queue
PULL, PARSE PULL
PUSH
QUEUE
Rexxs Stack is a generalized communications
mechanism
54Rexx Supports Recursion
Script X
How Recursion Works
Yes
End Test Fufilled ?
No
Call Script X
55Tip Steps to Good Programming Style
Ect !
Error checking
Structured Code
Modularity
Comments
Limit Nesting
Spacing indentation
Good variable names
Capitalization
56Debugging Options
SAY Instruction
TRACE Instruction in batch mode
Interactive TRACE
Quick, informal Great for simple problems
Requires changing code (adding SAY
instructions)
Resolves challenging problems Allows
real-time code tests Programmer-directed
interaction resolves problems Quick easy, but
powerful
Batch script trace Can set trace level based
on user input Many trace settings available
Good for paperanalysis of a problem
57Condition / Exception Trapping
signal on condition name label_name
code of the main routine...
label_name
code of the error handling routine...
Conditions error, failure, halt, novalue,
notready, syntax, lostdigits
58VI. Conclusions
59Trends !
Conclusions
- Free open source languages have taken over
- Scripting is the quiet revolution
- Rexx offers Power through Simplicity
- Useful addition to your toolbox
-
60Next...
Resources
INTERPRETER DOWNLOAD Regina http//regina-rexx
.sourceforge.net BRexx http//bnv.home.cern.ch/bn
v/ Reginald http//www.borg.com/jglatt/rexx/rexx
user.htm Rexx/imc http//users.comlab.ox.ac.uk/ia
n.collier/Rexx/rexximc.html Rexx for Palm
OS http//www.jaxo.com/rexx/ r4 http//www.kilow
attsoftware.com/ roo! http//www.kilowattsoftwar
e.com/ Open Object Rexx http//www.rexxla.org NetR
exx http//www-306.ibm.com/software/awdtools/netr
exx/ Rexx Programmers Reference at Amazon
www.amazon.com/rexx
61?
?
?
?
questions...
?
?
?
?