REXX Tips & Tricks:Miscellaneous
This section contains some further useful information.
Using PMREXX
The syntax for PMREXX is:
>>──PMREXX───┬────┬──┬─────────────┬─┬───────────┬─>< ├─/Q─┤ └─rexxprogram─┘ └─parameter─┘ └─/T─┘
Where:
- /Q
- Close PMREXX after the REXX program ends (no "The program has ended" message box)
- /T
- Start PMREXX in trace mode
- rexxprogram
- Name of the rexx program
- parameter
- Parameter for the REXX program
All parameters, except rexxprogram, are optional.
Using PMREXX with the parameter /Q is useful for simple programs which only need to show a PM messagebox (using RxMessageBox). For an example see Saving the Desktop (3.0)
(see Run a REXX program under a specific environment on how to force a program to run under PMREXX)
Please note that you cannot use OS/2 commands that change the environment in a REXX program running under PMREXX. You have to use a similar REXX function for that purpose (e.g. directory() instead of CD, VALUE() instead of SET, etc.).
Warning: The default address environment for a REXX program started via PMREXX in WARP 3 is PMREXX; the default environment in WARP 4 is CMD. Therefore, you cannot distinguish between the environments using ADDRESS() in WARP 4!
- Note
- see also PMPopup/2 if you only want to use simple dialog boxes in REXX programs.
The RXQUEUE filter
The purpose of the RXQUEUE filter is to copy the output of an OS/2 program into a REXX queue (The RXQUEUE filter is the external program RXQUEUE.EXE - not the built-in function RXQUEUE!) The syntax for RXQUEUE filter is:
>>──RXQUEUE──┬───────────┬──┬────────┬──────>< └─queuename─┘ ├─/FIFO──┤ ├─/LIFO──┤ └─/CLEAR─┘
The RXQUEUE filter usually operates on the default queue named "SESSION". However, if an environment variable named "RXQUEUE" exists, the RXQUEUE value is used for the queue name.
Parameters
- queuename
- This is the name of the queue to use. The queue must already exist. The name of a queue can only contain the following characters: 'A'...'Z', '0'...'9', '.', '!', '?' and '_'. Lowercase letters are converted to uppercase letters.
- /LIFO
- Stacks items from STDIN last in, first out (LIFO) on a REXX queue.
- /FIFO
- Queues items from STDIN first in, first out (FIFO) on a REXX queue.
- /CLEAR
- Removes all lines from a REXX queue.
- Note
- Again, do not confuse the RXQUEUE filter with the RXQUEUE built-in function! Note further that you cannot use the RXQUEUE filter to write a REXX queue to STDOUT - you've to write a REXX program to do this task. (see Write the REXX Queue to STDOUT for an example).
Return code of the function ADDRESS
A REXX program can use the function ADDRESS to detect the current environment. Following is a list of environments I know about (see Passing parameter to Rexx Dialog programs and Run a REXX program under a specific environment for examples for using this function.):
Return code of ADDRESS | Environment | Comments |
---|---|---|
CMD | OS/2 REXX Interpreter; also Object REXX for Win95/WinNT | use PARSE SOURCE to distinguish between the interpreter: OS/2 REXX returns OS/2; Object REXX for WinNT returns WIN32 |
CMS | VM/ESA 1.1 REXX Interpreter | |
COMMAND | Bill's REXX for DOS IBM PC DOS 7 REXX Interpreter |
Use PARSE VERSION to distinguish between the environments. |
CPEDIT | CPEDIT, an XEDIT clone from IBM | |
CPICOMM | SAA common environment especially used with communications | |
DFS | Display File Systems | |
DOS | Bill's REXX for DOS IBM PC DOS 7 REXX Interpreter |
Use PARSE VERSION to distinguish between the environments. |
EPM | EPM, OS/2 Editor | |
GLOBE | PMGlobe 2.18 | IBM EWS Graphic program from Mike Cowlishaw, IBM UK Laboratories |
FLEETSTREET | FleetStreet v1.03 | Msg Reader & Editor for Squish msg bases |
INT2E | Bill's REXX for DOS | |
ispcir | OS/2 DialogManager, IBM | |
IPSEXEC | Tritus SPF, Tritus Inc. | |
ISREDIT | SPF/2, CTC | |
KEDIT | KEDIT, an XEDIT clone from Mansfield Software | |
ksh | IBM's AIX REXX | The value is independent from the current shell |
MVS | OS/390 v1.2 (PGM=IRXJCL) REXX Interpreter | |
NULL | DrDialog | this is an alternate SubCommand-Handler for DrDialog programs |
PMREXX | PMREXX, OS/2 PMREXX.EXE (see the warning in the section Using PMREXX) | |
REXXTERM | REXXTERM, Quercus Software | |
RXDLG | Rexx Dialog | |
SAY | DrDialog | this is an alternate SubCommand-Handler for DrDialog programs |
STARTDOS | StartDOS | a program to start DOS VDMs by Monte Copeland |
SYSTEM | Bill's REXX for DOS Mark Hesslings's Regina REXX for Windows NT |
use PARSE SOURCE to distinguish between the interpreter: Bill's REXX returns MSDOS, Mark's REXX returns WIN32 |
TE2 | TE/2, Oberon Software | |
THE | THE Hessling Editor by Mark Hessling | THE is an XEDIT clone for various operating systems |
TSO | OS/390 v1.2 (TSO) REXX Interpreter | |
VISION | ObjectVision, Borland | |
UNIX | uniREXX on Solaris v2.6 | |
ZOC | ZOC 2.x, Markus Schmidt | One of the best OS/2 terminal programs available! |
ANSI ESC Sequences
"Compiling" REXX programs
Prevent REXX from creating a token image
Set the read-only attribute of REXX cmds for which the REXX interpreter should not create a token image (or copy them to a read-only disk or to a filesystem not supporting Extended Attributes).
"Undocumented" REXX functions
The following REXX functions to work with DBCS mixed Strings are only documented in the IBM: OS/2 2.0 Procedures Language/2 Reference Manual and in the Object-Oriented REXX online documentation:
- DBADJUST
- DBBRACKET
- DBCENTER
- DBLEFT
- DBRIGHT
- DBRLEFT
- DBRRIGHT
- DBTODBCS
- DBTOSBCS
- DBUNBRACKET
- DBVALIDATE
- DBWIDTH
Well, for the "normal" REXX programmer only two of these functions are interesting (The functions also work with SBCS strings):
Name DBRLEFT( string, n {,option} ) Function Delete n chars beginning with the first char Example DBRLEFT( "ABCDEFG", 2 ) gives "CDEFG" Note The parameter option is only needed for DBCS strings) For SBCS strings you should not use this parameter.
Name DBRRIGHT( string, n {,option} ) Function Delete n chars beginning with the last char Example DBRRIGHT( "ABCDEFG", 3 ) gives "ABCD" Note The parameter option is only needed for DBCS strings) For SBCS strings you should not use this parameter.