Jump to content

REXX Tips & Tricks:Miscellaneous

From EDM2

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.