REXX (REGINA 3.3) FOR OPENVMS VAX
=================================

What this is
  Regina, a Rexx interpreter (Anders Christensen; Mark Hessling and Florian
  Grosse-Coosmann), version 3.3 of 25-APR-2004, built on OpenVMS VAX V7.3
  with Compaq C V6.4.  Rexx is the Restructured Extended Executor language
  of IBM (Mike Cowlishaw): ANSI Rexx (TRL2) with Regina's extensions.
  Licence: GNU Library General Public License version 2 (the file
  COPYING_LIB.TXT here); sources and the changes made for this kit are in
  [SRC] and are described in SOURCES.TXT.

  Rexx is a scripting language for DCL users: it runs DCL commands
  (ADDRESS SYSTEM), captures their output in stems or on the data stack,
  reads and writes DCL symbols and logical names with VALUE(), and has the
  DCL lexical functions built in as functions of the same names.

Use
  $ @SYS$COMMON:[SYSLIB.REXX]REXX_SETUP              ! once per login
  $ REXX HELLO.REX arguments                         ! run a script
  $ REXX QUEENS                                      ! type may be left out

  A script is searched in the current directory, then in REGINA_MACROS (set
  to the examples directory by REXX_SETUP); the types .REXX .REX .CMD .RX are
  tried.  The script's first line must be a comment (Rexx rule).

DCL integration (the part added for OpenVMS)
  Commands        ADDRESS SYSTEM 'DIRECTORY *.COM' WITH OUTPUT STEM D.
                  A command is a DCL command; it runs in a subprocess
                  (LIB$SPAWN).  RC is 0 if the condition value of the command
                  is a success, otherwise the condition value (without bits
                  28-31): F$MESSAGE(RC) is its text.  A command whose output
                  you do not redirect shows on the terminal as usual; when
                  your own output is a file (batch, DEFINE/USER SYS$OUTPUT)
                  its output is taken through a file and written in order.
                  SYS$ERROR of the command follows its SYS$OUTPUT.
  Symbols         VALUE('NAME',,'SYMBOL')   a DCL symbol (local table)
                  VALUE('NAME','x','GLOBAL') the global symbol table
                  VALUE('NAME',,'LOGICAL')  a logical name; one you define
                  has user mode and is gone when the script ends (as with
                  DEFINE/USER).  The pools SYSTEM and ENVIRONMENT are the
                  same as SYMBOL.
                  Symbols are set in the DCL of the calling process, so they
                  stay after the script.  Apostrophe substitution is not done
                  in a command string: write WRITE SYS$OUTPUT "x" + SYM.
  Functions       F$CVSI F$CVTIME F$CVUI F$DEVICE F$DIRECTORY F$EDIT
                  F$ELEMENT F$EXTRACT F$FAO F$FILE_ATTRIBUTES F$GETDVI
                  F$GETJPI F$GETQUI F$GETSYI F$IDENTIFIER F$INTEGER F$LENGTH
                  F$LOCATE F$LOGICAL F$MESSAGE F$MODE F$PARSE F$PID
                  F$PRIVILEGE F$PROCESS F$SEARCH F$SETPRV F$STRING F$TIME
                  F$TRNLNM F$TYPE F$USER.  Same arguments as in DCL, strings
                  quoted in Rexx style.  F$TYPE gets a value, not a symbol
                  name; F$PID's argument is the NAME of a Rexx variable that
                  holds the context.  Missing: F$CONTEXT F$CSID F$ENVIRONMENT
                  F$NODE F$VERIFY.
  Exit status     EXIT 0 gives $STATUS 1; EXIT n gives an error status with
                  the message display inhibited, %X10000000 + n*8 + 2, so
                  IF .NOT. $STATUS works and DCL prints no message.  The
                  code is ($STATUS / 8) .AND. %XFFFF.
  Time            TIME('O') uses SYS$TIMEZONE_DIFFERENTIAL (seconds).

Known limits
  * ADDRESS COMMAND and PATH are DCL too (no direct image execution).
  * stdin of a command: from a stem, queue or file with WITH INPUT; a
    command that reads the terminal reads the terminal.
  * STREAM() on a directory name does not work (README.VMS of the original).
  * The SAA application programming interface and the shared library are
    not built; only the stand-alone interpreter, REXX.EXE.

Directories
  [000000]      REXX.EXE, REXX_SETUP.COM, README.TXT, SOURCES.TXT,
                COPYING_LIB.TXT, REXX_MANIFEST.LIS
  [DOC]         the distribution's documents (README.VMS, README.33 ...)
  [EXAMPLES]    example programs, expected output, RUN_TESTS.COM, ORACLE.*
  [SRC]         the sources as built (with our changes), BUILD_REXX.COM,
                REXX_BUILD.LIS; [SRC.DEMO] and [SRC.TRIP] of the distribution
  [PATCHES]     our changes as unified diffs

Examples
  $ @SYS$COMMON:[SYSLIB.REXX.EXAMPLES]RUN_TESTS       ! 14 programs, checked
  $ @SYS$COMMON:[SYSLIB.REXX.EXAMPLES]RUN_ORACLE      ! F$ functions against DCL
  Both make their work files in a private subdirectory of SYS$SCRATCH
  (REXXTEST_<pid>, ORACLE_<pid>; SYS$SCRATCH is your home directory on most
  VAXen), and delete it again at the end, also after a failure or CTRL/Y.
  Nothing is left in your directory.  (Kit of 12-OCT-2026 B: the first kit,
  REXX_VAX_20261012.BCK, left ORACLE_DCL.TMP, ORACLE_REX.TMP and
  ORACLE_DIFF.TMP behind after RUN_ORACLE.  REXX.EXE is the same in both.)

Remove
  $ @REXX_UNINSTALL           (from the kit directory; as SYSTEM)

This kit changes no system file, no startup file, no SYSUAF and not STARLET.
