Question 1. 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.
Question 2. For Which Platforms Is Uni-rexx Available?
uni-REXX is now available on SUN’s Solaris 7/8/9, H/P’s HP/UX 10/11, IBM’s AIX 4/5, SGI’s IRIX 5/6, NCR UNIX, Linux Intel and S/390.
Question 3. 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.
Question 4. Can I Port My Existing Applications From The Mainframe Or Os/2? Will There Be Extensive Changes Required To Do This?
“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.
Question 5. 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:
select when env = 'UNIX' then command = 'ls' when env = 'CMS' then command = 'listf' when env = 'TSO' then command = 'listc' otherwise call OS_error_routine end : : [ to do a list command, you write]> : command /* value is sent to OS */
Question 6. 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 parenthesis):
- 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).
Question 7. 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.
Question 8. How To Access Data Held On The Jes Spool?
Held output (JES2 or JES3) can be captured by outtrapping the output of the following command:
"OUTPUT jobname PRINT(*) KEEP".
Use command HELP OUTPUT for more information.
Furthermore there are output tools you can buy like SDSF, IOF, (E)JES, etc. But not all of these have got a rexx interface.
Question 9. How To Access Data In Control Blocks Such As Jobname?
Use the Storage() function to extract the data from control blocks.
/* REXX Get taskname from TCB */ cvt = storage(10,4) /* FLCCVT-PSA data area */ tcbp = storage(d2x(c2d(cvt)),4) /* CVTTCBP */ tcb = storage(d2x(c2d(tcbp)+4),4) tiot = storage(d2x(c2d(tcb)+12),4) /* TCBTIO */ say strip(storage(d2x(c2d(tiot)),8)) /* TIOCNJOB */
Question 10. Suppose If There Are A Set Of Statements And Each Has A Word “value” In It, If I Want To Display All These Statements So That The Word “value” Is Aligned, Then How Do I Code This In Rexx?
/**REXX**/ ADDRESS TSO "ALLOC DD(INP1) DA('input-dataset') SHR REUS" "EXECIO * DISKR INP1 (STEM IN1. FINIS" MAX_OFFSET = 0 INP_OFFSET = 0 DO I = 1 TO IN1.0 PARSE UPPER VAR IN1.I INP INP_OFFSET = POS("VALUE",INP) IF INP_OFFSET > MAX_OFFSET THEN DO MAX_OFFSET = INP_OFFSET END END DO I = 1 TO IN1.0 PARSE UPPER VAR IN1.I INP Z = POS("VALUE",INP) SAY LEFT(SUBSTR(IN1.I,1,(Z - 1)),(MAX_OFFSET - 1))||, SUBSTR(IN1.I,Z,20) END "FREE DD(INP1)"
Question 11. How To Pass Parms To Ispf Edit Macro?
On the command line in the editor, just use the name of the macro and list the parameters behind it. E.g. if you have a macro called FINDALL and it expects 3 parameters you would specify in the command line: FINDIT parm1 parm2 parm3.
When you code the MACRO the first line should be like:
Address ISREDIT "MACRO (parm1 , parm2, parm3)"
Since you are working with REXX you could have used:
Address ISREDIT "MACRO ( parm )"
You then parse the parm like this:
Parse (UPPER) Arg parm parm1 parm2 parm3.
Question 12. Can I Cleanly Uninstall Oorexx?
Question 13. Can I Redistribute Oorexx Freely With Commercial Software?
Question 14. Can Oorexx Run Ibm Object Rexx Programs?
Question 15. Can Oorexx Run Normal Rexx Programs?
Question 16. 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.
Question 17. How Long Does The Install Of Oorexx Take?
30 seconds or less, depending on your hardware.
Question 18. 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.
- 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.
Question 19. Is Oorexx Compatible With Ibm Object Rexx?
Question 20. Is Oorexx Compatible With Rexx?
Question 21. Is There An Aix Version Of Oorexx?
ooRexx for AIX is available starting with the 3.1 release.
Question 22. What Is The Difference Between Oorexx And Ibm’s Object Rexx For Windows?
IBM’s Object REXX was available in two formats; an Interpreter Edition and a Development Edition. ooRexx will be available in one format which is half way between the two IBM offerings. There will be no functional difference between the Object REXX and ooRexx interpreters; code written for Object REXX will work with ooRexx.
Question 23. When Will A Port Of Oorexx To “xyz” Be Available?
Any POSIX-based, Unix-like platform is likely to already be available in the source distribution due to the use of the autoconf toolset. If not, then support for the particular platform will need to be implemented in a future version of ooRexx.
Question 24. Why Is There No Os/2 (ecs) Port Of Oorexx?
The source code provided to RexxLA was maintained by one group of IBM developers. The source code for OS/2 is maintained by a different group of IBM developers, and that source code base was not supplied to RexxLA. One of the future tasks for this project is to port the Open Source code for ooRexx to OS/2.
IBM – VSAM Interview Questions
IBM DB2 Tutorial
IBM DB2 Interview Questions
COBOL Interview Questions
IBM-JCL Interview Questions
IBM Mainframe Interview Questions
IBM – VSAM Interview Questions
IBM Mainframe Tutorial
IBM Cloud Computing Infrastructure Architect V1 Interview Questions
IBM WebSphere MQ Interview Questions
IBM DB2 Interview Questions
IBM DataPower Interview Questions
Unix/Linux Interview Questions
COBOL Interview Questions