Extend the program REXXTRY.CMD

[Autolink] Menu

The program REXXTRY.CMD (in the directory \OS2) is really useful to test some REXX statements. But it has one disadvantage: The input routine is very simple.

But, thanks to Albert Crosby, there's a simple way to overcome this disadvantage. Albert Crosby who's that you might ask. Well, Albert Crosby is the author of a REXX routine called CMDLINE1.CMD which is very suitable to extend the input routine from REXXTRY.CMD

To do this do the following:

Create a copy of the file REXXTRY.CMD and name it EREXXTRY.CMD.

Extract the source code of CMDLINE.CMD from this document (see Using the samples)

Load the file EREXXTRY.CMD into a text editor and append the source of CMDLINE1.CMD at the end of EREXXTRY.CMD.

Then insert the following lines in EREXXTRY.CMD before the line parse arg argrx:

 
/* ------------------------------------------------------------------ */
/* history of changes for RXT&T version:                              */
/*                                                                    */
/* RXT&T v1.60 /bs                                                    */
/*  - changed code to also work if REXXUTIL is not accessible         */
/*                                                                    */
/* RXT&T v1.70 /bs                                                    */
/*  - corrected an error in the RxFuncAdd calls                       */
/*  - in the previous version, undefined function keys lead to        */
/*    invalid return codes in cmdline. Corrected.                     */
/*  - added code to save and load the history list to the routine     */
/*    cmdline                                                         */
/*    The keys for handling the history file are:                     */
/*      F2       - save the history list (overwrite an existing file) */
/*      ALT-F2   - save the history list (append to an existing file) */
/*      SHIFT-F2 - load the history list                              */
/*      CTRL-F2  - change the history list file                       */
/*      ALT-F4   - save history list and exit program                 */
/*  - added online help for the edit keys (CTRL-F1)                   */
/*                                                                    */
/* RXT&T v2.00 /bs                                                    */
/*  - added code to handle situations when other programs drop the    */
/*    REXXUTIL functions                                              */
/* RXT&T v2.30 /bs                                                    */
/*  - added key definitions for loading and dropping REXXUTIL         */
/*    functions (F11 and F12)                                         */
/* RXT&T v2.40 /bs                                                    */
/*  - added code to show the version of the active REXX interpreter   */
/*                                                                    */
/* (c) 1996 Bernd Schemmer, Germany, EMail: Bernd.Schemmer@gmx.de     */
/*                                                                    */
/*                                                                    */
ReStart:                                                     /* v2.00 */

  if rxFuncQuery "SysCurPos" = 0 then                        /* v1.60 */
    call rxFuncDrop "SysCurPos"                              /* v1.60 */
  if rxFuncQuery "SysGetKey" = 0 then                        /* v1.60 */
    call rxFuncDrop "SysGetKey"                              /* v1.60 */

                        /* load the necessary REXXUTIL          v1.60 */
                        /* functions                            v1.60 */
  call RxFuncAdd "SysCurPos", "RexxUtil", "SysCurPos"        /* v1.70 */
  call RxFuncAdd "SysGetKey", "RexxUtil", "SysGetKey"        /* v1.70 */

  !rexxUtilLoaded = 0                                        /* v1.60 */

                        /* check if the rxFuncAdd calls were    v1.60 */
                        /* successful                           v1.60 */
  signal ON Syntax Name RexxUtilNotLoaded                    /* v1.60 */

  call SysCurPos                                             /* v1.60 */

                         /* use the extended input              v1.60 */
                         /* routine only if possible            v1.60 */
  !rexxUtilLoaded  = 1                                       /* v1.60 */

                         /* name of the file for the history    v1.70 */
                         /* list                                v1.70 */
  !history.file = "EREXXTRY.HST"                             /* v1.70 */

                                       /* redefine some keys          */
  !history.key.61  = "exit"            /* F3                          */
  !history.key.104 = "?"               /* ALT-F1                      */


                                       /* F11 load REXXUTIL     v2.30 */
  !history.key.133 = "call rxFuncAdd 'SysLoadFuncs', 'REXXUTIL', 'SysLoadFuncs'; call SysLoadFuncs; say 'REXXUTIL loaded.'";

                                       /* F12 drop REXXUTIL     v2.30 */
  !history.key.134 = "call SysDropFuncs; say 'REXXUTIL functions dropped.'"


                    /* see Key redefinitions for further key codes    */

RexxUtilNotLoaded:                                           /* v1.60 */
/* ------------------------------------------------------------------ */

Now replace the line parse pull inputrx in EREXXTRY.CMD with

 
/* ------------------------------------------------------------------ */
   parse version tVersion                                    /* v2.40 */
   say "  --- Current REXX interpreter is: "tversion         /* v2.40 */

   if !rexxUtilLoaded <> 1 then                              /* v1.60 */
   do                                                        /* v2.00 */
     say "  --- no extended keys available --- "             /* v2.00 */
     say "  --- use ""signal restart"" to try to load"  ,    /* v2.30 */
         "the extended key support again --- "               /* v2.30 */
     inputrx = lineIN()                                      /* v1.60 */
   end                                                       /* v2.00 */
   else                                                      /* v1.60 */
   do                                                        /* v1.70 */
     say "  --- extended keys are active," || ,              /* v1.70 */
         " CTRL-F1 = online help ---"                        /* v1.70 */
     inputrx = cmdLine()                                     /* v1.60 */
   end                                                       /* v1.70 */
/* ------------------------------------------------------------------ */

Save the file EREXXTRY.CMD.

That's all! You've just created EREXXTRY.CMD - a clone of REXXTRY.CMD with a much more comfortable input routine.

See also: CMDLINE