Title: Golden Rules of Locking
1Free Rexx !
Everything You Ever Wanted to Know About Rexx
(but were afraid to ask)
Howard Fosdick (C) 2006 FCI
Version
2.0
2- Presentation by Howard Fosdick,
- author of Rexx Programmers Reference
- Find the book at www. Amazon.com/rexx
- This presentation is published under the Open
- Publication License (OPL).
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 lt 2 hours !
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), IBM PC-DOS 2000 and
7 Handhelds-- Windows CE / Mobile / PPC / etc,
Palm OS,
Symbian/EPOC32, EPOC, DOS emulation Embedded-- Em
bedded Linux, DOS, Windows variants Mainframes--
z/OS, z/VM, z/VSE (all versions) IBM
iSeries-- i5/OS, OS/400 (all versions) Many
others-- AmigaOS, AROS, MorphOS, OpenVMS,
BeOS, OpenEdition,
AtheOS/Syllable, SkyOS,
QNX (QNX4/QNX6), OS/2, eCS, osFree, more
Rexx predominates on systems in red
18- Rexx Has Critical Mass...
Perl
Critical mass
Python
Rexx, Tcl/Tk, Ruby
Many other good languages (Korn, C-shell, bash,
Bourne, Lua, Mumps, etc)
Do not have critical mass
Open source, general purpose scripting languages
with critical mass -- Run everywhere
(on all major OSs and platforms)
Have strong standards Enjoy wide use
and offer good support
Internationally In many spoken
languages Offer thousands of free
tools and scripts Interface to
everything (databases, web programming, GUIs,
etc, etc) NOTE-- The chart excludes non-open
source (eg VB, VBScript) and non-general purpose
(eg PHP) scripting languages
19The Free Rexx Interpreters
BRexx
Regina
Rexx/imc
Windows, DOS (32/16 bit), Windows CE, Linux,
Unix, Mac OS, AmigaOS, 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
20Rexx Free Tools and Interfaces
- Over 2000 free tools scripts 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 . . .
-
21III. Lets Code !
22Example 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) gt 0 / Do while
a line to read / Â input_line
linein(filein) / Read an input line
/ Â if pos('PAYMENT_OVERDUE',input_line) gt 0
then say 'Found it' input_line
/ Write line if overdue / Â end
23- 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
24- 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
25Example Script 2
arg filein fgrep PAYMENT_OVERDUE filein
This script does the same thing as Example 1
26- 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
27 Structured Control Instructions
If
If then else
Do End
Do While
Select
Call
(case)
Subroutine or Function
28Un-Structured Control Instructions
Do Until
Do Forever
Iterate
Leave
Signal
(goto)
29- 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
30Example 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 ltgt '' / Loop until
user enters null line / Â say 'For which town
do you want the area code?' pull town  if
town ltgt '' 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
31- 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
32Example 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'
33Example 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 ltgt ''
/ Look at each book / count 0 do
k 1 while keyword.k ltgt '' / Inspect
its keywords / do l 1 while
title.j.l ltgt '' / Compute its weight
/ if keyword.k title.j.l then count
count 1 end end  if count gt
weight then / Display titles matching the
criteria / say title.j end
34- 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
35Create 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
36Example-- 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 ltgt TAIL say
'Element' list.sub sub list.sub.next
end return
37Why Rexx Vs Other Scripting Languages ?
For a language that lacks data structures, Rexx
sure has a lot of them!
Power thru Simplicity!
38IV. More about Rexx
39Rexx 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
40Rexx Standards
Early 90s
1990
1996
1985
TRL-1
TRL-2
SAA
ANSI
Language Level
4.00
5.00
3.50
41The Evolution of Rexx
Object-oriented Rexx
Early 1980s
Mid 1990s
Standard or Classic Rexx
NetRexx (for Java environments)
42Rexx 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
43How 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
44Object-Oriented Rexx Means
Classic Rexx
Classes and Methods
PLUS
Inheritance Derivation
Encapsulation
Abstraction
Polymorphism
Huge Class Library
45 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
46NetRexx
- 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 sides both
47NetRexx 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
48Developing 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.
49V. More Rexx Features
50How 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
51String 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
52Parsing Operations
Separate by words
By Words
By Pattern
Separate , using , commas
By Numeric Pattern
abc abc abc
Columns 1 5 9
53The 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
54The Stack is both a Stack and a Queue
PULL, PARSE PULL
PUSH
QUEUE
Rexxs Stack is a generalized communications
mechanism
55Rexx Supports Recursion
Script X
How Recursion Works
Yes
End Test Fufilled ?
No
Call Script X
56Tip Steps to Good Programming Style
Ect !
Error checking
Structured Code
Modularity
Comments
Limit Nesting
Spacing indentation
Good variable names
Capitalization
57Debugging 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
58Condition / 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
59VI. Conclusions
60Trends !
Conclusions
- Free open source languages have taken over
- Scripting is the quiet revolution
- Rexx offers Power through Simplicity
- Useful addition to your toolbox
-
61Resources
Next...
Find everything at
www.RexxInfo.org -- download Rexx --
download tools -- tutorials, articles,
how-tos -- reference materials Rexx
Programmers Reference at Amazon
www.amazon.com/rexx
62?
?
?
?
questions...
?
?
?
?