What is uni-REXX?
uni-REXX is a UNIX implementation of IBM's popular Rexx
programming language as defined by M. F. Cowlishaw in The
Rexx Language, A Practical Approach to Programming (Prentice-Hall,
2nd. Edition, 1990), and by the ANSI Standard Sj18.
For which platforms is uni-REXX available?
uni-REXX is now available on SUN's Solaris Sparc and Intel, H/P's HP/UX Integrity, IBM's AIX 6 and up
, Linux Intel and S/390.
What would I use uni-REXX for?
uni-REXX can be used for a wide variety of purposes.
The most popular include
- automating system administration tasks
- development of end-user applications
- rapid prototyping of compiled-language applications
uni-REXX can also be embedded as a scripting language or system-control
language in other applications.
Why would I prefer uni-REXX to the various UNIX shell languages?
There are many reasons, and the answer depends on your
individual needs. If you can answer yes to any of the questions
below, then you need uni-REXX:
- Do you have customized applications that invoke an editor
(such as XEDIT or ISPF) as part of their processing?
- Do you have applications that must continue to run on the
mainframe as well as UNIX (and possibly OS/2 or DOS as well)?
- Do you have or anticipate applications that must combine
database access, editing or browsing files, and running other
programs into a seamless process for the user? Do you have or
anticipate applications that require seamless communication
with the operating system or other external environments?
- Have you already used Rexx - even for limited purposes? Do
you need to maintain a high level of productivity during your
transition to UNIX?
Further, uni-REXX is very easy to use, even if your previous
experience with it is limited. The syntax is very natural (English-like);
there are no data types to declare; interpretive execution facilitates
rapid development and debugging; and the interface to the operating
system is seamless.
Can I port my existing applications from the mainframe
or OS/2? Will there be extensive changes required to do this?
In general, the answer to this question is "Yes, you
can port existing applications with a minimum of modification".
Only the following modifications are normally required:
- references to disk file names
- statements in your program that execute operating system
commands -- The exceptions are EXECIO and GLOBALV; uni-REXX
has implemented these popular mainframe commands and made them
accessible from within a uni-REXX program.
- portions of your program that stack data for use by another,
non-Rexx program after the Rexx program has completed execution
-- Programs in UNIX run in individual processes, and there is
no concept of a persistent stack available to all processes.
The modifications required here are usually simple, and TWG
Technical Support is available to provide guidance, suggestions,
and sample solutions.
If your Rexx program is primarily a series of operating system
commands, then it may not be a good candidate for direct portation.
It may be, however, that the functions it performs have reasonable
counterparts in the UNIX environment and the program can be converted
to execute the equivalent UNIX functions. TWG Technical Support
is available to suggest alternatives for such conversions.
What if I need to have the same application running on
multiple platforms, such as UNIX and the mainframe? Does that mean
I have to maintain two separate sources?
Not at all. Rexx includes an instruction that allows
you to determine the environment in which your program is running.
PARSE SOURCE will give you a string in which the first token is
the name of the system where the program is running. For uni-REXX,
this is "UNIX"; on the mainframe, it would be "CMS" or "TSO". Then
you can put conditional processing into your program based on the
current execution environment. In a program that needed to display
a current listing of files, you might set your master source up
something like this:
parse source env .
when env = 'UNIX' then command = 'ls'
when env = 'CMS' then command = 'listf'
when env = 'TSO' then command = 'listc'
otherwise call OS_error_routine
: [ to do a list command, you write]>
command /* value is sent to OS */
What assurances do I have that my uni-REXX applications
will be portable? Does uni-REXX conform to any standard?
The Rexx language is defined by M. F. Cowlishaw in The
Rexx Language, A Practical Approach to Programming (Prentice-Hall,
2nd. Edition, 1990), which documents Rexx Language Level 4.00. Most
implementers of Rexx interpreters (including The Workstation Group)
conform to this language definition. uni-REXX V2.00 and later releases
deliver all of the features included in Language Level 4.00.
In addition, the American National Standards Institute (ANSI)
standard for the Rexx language was published in May 1996 as ANSI
standard X3.274:1996, Programming Language Rexx
. TWG is a member of the X3J18 committee that developed this standard
and that is continuing its work toward a second standard. TWG
has made a commitment to insure that uni-REXX conforms to these
Does uni-REXX give me any capabilities designed specifically
for the UNIX environment?
In addition to the standard language features, uni-REXX
includes a rich set of functions designed specifically for a UNIX
environment. These functions can be classified into the following
categories (with examples of each shown in parentheses):
- environment control (CHDIR, GETENV, PUTENV, GETCWD, etc.)
- file and directory management (_OPENDIR, _READDIR, _STAT,
- process management (_GETPID, _FORK, _WAIT, _KILL, etc.)
- configuration management (_GETUID, _GETHOSTNAME, etc.)
- system error processing (_ERRNO, _SYSERRLIST)
- regular expression processing (_REGEX)
- interprocess communications (_SOCKET, _CONNECT, _SEND, _RECV,
The uni-REXX Reference Manual provides detailed
documentation of all of these UNIX-specific functions, including
examples. The uni-REXX sample library includes an example of a
client/server application written in uni-REXX. The TWG Technical
Support staff is also available to answer your questions.
Can I combine uni-REXX with a compiled language in my application?
What application programming interfaces are available? For example,
can I share variables between uni-REXX and a compiled language?
uni-REXX offers a complete set of Application Programming
Interfaces (APIs). These APIs allow you to
- start a Rexx program from the compiled language program
- define new host command environments for Rexx
- access Rexx program variables
- access the Rexx program stack
- specify user-supplied exits
- terminate the Rexx program
- add user-defined functions that can be called by the Rexx
The uni-REXX Reference Manual contains complete
documentation for all of these APIs, including examples and documentation
of the control blocks used by the APIs. The uni-REXX Sample Library
includes a variety of examples illustrating the use of APIs individually
and in combination. The TWG Technical Support staff is also available
to answer your questions.
If I have limited experience with Rexx or it's been a long
time since I've used it, what kind of help is available to get me
uni-REXX comes with a sample library that includes a
examples of a variety of application types. These include
- * utilities for:
- date calculations and conversions
printing on a remote host
creating new userids (AIX)
running dbxw debugger on a process in another window
simulating the "which" command for UNIX implementations that
do not have it
printing a visual depiction of a directory structure
- * functions to:
- convert a system-independent filename into a local filename
perform specialized string search
add math functions to uni-REXX
- * filters to:
- uppercase all characters in an input stream
replace simulated box drawing (using "|", "+", "_") with real
box drawing characters
remove backspace characters from an input stream (useful for
reformatting the output of a man page for ASCII printing
- * illustrations of using the APIs to embed uni-REXX as a
scripting language in compiled language applications
- * example of using the UNIX-specific functions for a client/server
What if I have problems or questions?
Technical support is available by telephone, email, or
FAX. Product specialists with extensive experience in both the mainframe
and UNIX environments are available to assist you with a broad range
of questions. Telephone support is available from 8:30 A.M. to 5:00
P.M.Central time Monday through Friday. We are also happy to answer
your questions by email or FAX.
What about warranties, maintenance, and upgrades?
uni-REXX is delivered with 90 days' free support. This
entitles you to technical support during the period in which you
install and begin to use the product. It also entitles you to any
upgrades that may be distributed during that time. An extended maintenance
contract is also available for technical support and automatic upgrades.
For those who do not choose extended maintenance, upgrades may be
purchased at a percentage of the current list price.