Home Products Downloads Support Sales Company

 Product Links

   New Release
   Product Support

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 standards.

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, etc.)
  • 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, etc.)

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 program

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 started?

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 application

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.