REXX (Regina 3.3) for OpenVMS VAX 7.3 -- kit, 12-OCT-2026 ========================================================== Douglas P. Fields, Jr. (symbolics@lisp.engineer) Regina 3.3 (25-APR-2004), the free implementation of IBM's Restructured Extended Executor language by Anders Christensen, Mark Hessling and Florian Grosse-Coosmann, built on OpenVMS VAX V7.3 with Compaq C V6.4 as a BACKUP saveset with a DCL installer and a DCL uninstaller. The VMS part is what was made for this kit: the DCL lexical functions are built in as REXX functions of the same names, DCL commands run as ADDRESS environments with their output captured in stems, and DCL symbols and logical names are reachable with VALUE(). The target machine needs no compiler. Regina is free software under the GNU Library General Public License, version 2 (the file COPYING_LIB.TXT, here and in the kit). The complete corresponding source, with every change marked and dated, is in the source kit and in the saveset itself; section 3 says what that means. 1. FILES REXX_VAX_20261012B.BCK The kit: 5,031,936 bytes (9,828 blocks), 274 entries (268 files and the directory files), 8,491 blocks installed, most of them the sources. REXX_INSTALL.COM Installer. REXX_UNINSTALL.COM Uninstaller. REXX_VAX_20261012B_LIST.LIS BACKUP/LIST of the saveset: every file, with size and date. COPYING_LIB.TXT The GNU Library General Public License, version 2. SOURCES.TXT What was changed, file by file, and the written offer of the source (section 3). regina-3.3-openvms-vax-source-kit-20261012B.zip The complete corresponding source: the original Regina 3.3 archive, the tree with our changes applied, every change as a unified diff, the build and kit procedures, the host tools and the recipe to recreate the kit from scratch. regina-3.3-openvms-vax-examples-20261012B.zip Eleven example programs and their tests, with expected output, and the oracle test that compares the F$ functions with DCL. SHA256SUMS.TXT SHA-256 of every file above. README.TXT This file. You need the saveset and the two procedures. 2. REQUIREMENTS * OpenVMS VAX V7.3. (Tested on nothing else.) * SYSTEM, or another account with SYSPRV, to install or uninstall. * The system disk: the kit installs to SYS$COMMON:[SYSLIB.REXX...] and nowhere else. About 21,000 blocks should be free while installing (the saveset plus the installed tree plus cluster rounding: an estimate from the sizes; the installer does not check). Nothing system-wide is changed: no startup file, SYLOGIN, DCLTABLES, system logical name, installed image, UAF record or quota -- and not STARLET. 3. LICENCE: LGPL VERSION 2 Regina is under the GNU Library General Public License, version 2 ("or any later version"). What that asks of this kit, and where it is met: * Copyright notices and the licence stay with every copy: every original file keeps its header; COPYING_LIB.TXT is in the kit and in this folder. * Modified files carry prominent notices stating the change and its date: each changed file contains a "MODIFIED 12-OCT-2026 ... lang-rexx" note (lang-rexx is the name of the working session that made the change for me); SOURCES.TXT lists every change; the patches are in the source kit. * The modifications are under the LGPL too: our new code (vmscmd.c, the F$EDIT and F$DEVICE functions, ...) is part of the library files. * The user can modify the library and relink: the saveset carries the complete corresponding source of everything linked into REXX.EXE ([SRC], and BUILD_REXX.COM to rebuild), and no library other than the C run-time library is linked. The source kit has it again, with the original archive. * Written offer: the complete source of this kit, with the changes and the procedures to build it, is available from Douglas P. Fields, Jr. (symbolics@lisp.engineer) on request, and is in the source kit downloadable from the same page as this kit. Nothing restricts running Regina or using it for your scripts. The installer, uninstaller, setup procedure, examples and tools are mine. 4. INSTALLING 1. Copy the saveset and both .COM files into one directory on the system disk of the VAX. TRANSFER MODES MATTER. Send the .BCK saveset in BINARY. Send the .COM files as TEXT (FTP "ascii"). A procedure sent in binary arrives as 512-byte fixed records and DCL refuses it (%RMS-W-RTB). 2. A binary transfer loses the saveset's record attributes (FTP leaves it as fixed 512-byte records, RCP as Stream_LF). The installer puts them back itself; to BACKUP/LIST the saveset first, do it yourself: $ SET FILE/ATTRIBUTE=(RFM:FIX,LRL:32256,MRS:32256,RAT:NONE) - REXX_VAX_20261012B.BCK 3. As SYSTEM, in that directory: $ @REXX_INSTALL or, over an existing installation of this kit: $ @REXX_INSTALL "" REPLACE The installer checks privilege and the saveset, restores the tree with BACKUP/VERIFY through a concealed root, sets owner and protection, writes a manifest of every file it installed (REXX_MANIFEST.LIS in the top directory) and runs a smoke test in a subprocess. It took about 9 to 10 seconds on a simulated MicroVAX 3900; the first kit (section 9) took 33 seconds on a VAXstation 4000/96. It refuses, changing nothing, without SYSPRV, for a missing saveset, or if the tree exists and REPLACE was not given. 4. Each user, at the prompt or in LOGIN.COM: $ @SYS$COMMON:[SYSLIB.REXX]REXX_SETUP $ REXX HELLO.REX arguments ! run a script $ REXX QUEENS ! type may be left out REXX_SETUP defines the REXX and REGINA commands, REXX_BIN, REXX_EXAMPLES and REGINA_MACROS (the examples directory, searched for scripts, unless you have defined it), for that process only. A script is searched for in the current directory, then in REGINA_MACROS; the types .REXX .REX .CMD .RX are tried. The first line of a script must be a comment. The DCL integration, in short (the kit's README.TXT, installed in the top directory, has all of it): ADDRESS SYSTEM 'DIRECTORY *.COM' WITH OUTPUT STEM D. VALUE('NAME',,'SYMBOL') a DCL symbol (local) VALUE('NAME',,'GLOBAL') the global symbol table VALUE('NAME',,'LOGICAL') a logical name (user mode: gone at exit) F$GETJPI('','USERNAME') the DCL lexical functions, as REXX functions EXIT 0 is $STATUS 1; EXIT n is an error status with no message 5. UNINSTALLING As SYSTEM, in the directory holding REXX_UNINSTALL.COM: $ @REXX_UNINSTALL CHECK ! report only, changes nothing $ @REXX_UNINSTALL ! remove REXX It deletes only files the manifest lists, one explicit file;version at a time, and only if each still has the size and revision date it was installed with; then the directories left empty, deepest first, then the manifest. Anything else in the tree stays and is listed. The exit status is 4 if anything was kept. It refuses, changing nothing, if the manifest is missing or damaged. A second run says "not installed". Tested many times on simulators (the lifecycle test, section 8), and on a VAXstation 4000/96. 6. CHECKING THE INSTALLATION As an ordinary user, after REXX_SETUP: $ @SYS$COMMON:[SYSLIB.REXX.EXAMPLES]RUN_TESTS ! PASS 14 of 14 $ @SYS$COMMON:[SYSLIB.REXX.EXAMPLES]RUN_ORACLE ! PASS 128 of 128 RUN_TESTS runs 11 programs and three more checks (the exit status of a script as DCL sees it) and compares each with an expected output made by independent Python code, or by DCL itself. RUN_ORACLE runs 128 F$ calls once through DCL and once through the REXX built-ins, and compares the results line by line. Both make their work files in a private subdirectory of SYS$SCRATCH and delete it at the end, also after a failure or CTRL/Y. It took about 10 seconds on the simulator. 7. WHAT IS DIFFERENT FROM THE DISTRIBUTION Eight changes (SOURCES.TXT and the source kit's patches/): 01 error.c, regina_c.h, arxfuncs.c 42 Latin-1 bytes written in ASCII 02 vmsfuncs.c the lexical functions: the raw #error block removed, const and TSD corrections Compaq C needs, uninitialised 16-bit lengths, bit order of F$CVUI/F$CVSI, F$CVTIME, F$FAO rewritten, F$GETSYI items and node argument, F$LOCATE, F$PRIVILEGE, F$SEARCH, F$IDENTIFIER; new F$EDIT and F$DEVICE 03 vmscmd.c replaced: VALUE() for symbols and logical names, the LIB$SPAWN helper, the user-mode SYS$OUTPUT hidden while a subprocess runs 04 envir.c, shell.c the fork/posix_do_command redefinitions removed 05 doscmd.c VMS uses the temporary-file style; LIB$SPAWN; output replayed in order when stdout is a file 06 builtin.c, extern.h, funcs.c VALUE() pools; TIME('O'); the new functions registered 07 rexx.c REXX exit code -> VMS condition value 08 configur.h "SYS$LOGIN:X.REX" is a file specification The shipped BUILD.COM and DESCRIP.MMS (which need MMK and stop at the first error) are replaced by BUILD_REXX.COM and REXX_BUILD.LIS. Flags: CC/NOLIST/NAMES=SHORTENED/DEFINE=VMS/OPTIMIZE/STANDARD=RELAXED_ANSI89 /WARNINGS=DISABLE=(IMPLICITFUNC). 8. KNOWN LIMITS * Stand-alone interpreter only: the SAA application programming interface and the shared library are not built. * Missing DCL functions: F$CONTEXT F$CSID F$ENVIRONMENT F$NODE F$VERIFY. * ADDRESS COMMAND and PATH are DCL too; no direct image execution. * A logical name a script defines is user mode and is gone when the script ends, as with DEFINE/USER. * No apostrophe substitution in a command string: write WRITE SYS$OUTPUT "x" + SYM. * 'b='b is a binary-string literal in REXX: put a blank after the quote. * STREAM() on a directory name does not work (README.VMS of the original). * Regina 3.3 is the version on the DECUS tapes; later Regina versions (3.9.x) were not tried. * Terminal and batch only. Not tried on Alpha or Itanium. 9. HOW IT WAS BUILT AND TESTED Built on a simulated MicroVAX 3900 (Open SIMH) running OpenVMS VAX V7.3 with Compaq C V6.4-005, from regina-rexx-3_3_tar (DECUS VMS LT04A; SHA-256 of our .zst copy 106f1631f514d08160a804df036c2a959dc4d9f6b71a66a7419eb2a4c77963fa). On the simulator, the build is 43 modules and takes 69.7 seconds in a batch job, with an 883-block image. REBUILD.md in the source kit has the commands, results and hashes. Tests: RUN_TESTS 14 of 14; RUN_ORACLE 128 of 128; the lifecycle test (install, refuse a second install, CHECK, change and add files, uninstall which keeps them, REPLACE, clean uninstall, reinstall) 21 of 21, on the simulator. The first kit of 12-OCT-2026 (same REXX.EXE; its test procedures left three temporary files in the home directory, which this kit does not) was installed system-wide on a VAXstation 4000/96 that day, and RUN_TESTS passed 14 of 14 (38 seconds) and RUN_ORACLE 128 of 128 (3 seconds) as an ordinary user there. This kit, REXX_VAX_20261012B.BCK, was tested on the simulator only: RUN_TESTS 14 of 14, RUN_ORACLE 128 of 128, the lifecycle test 21 of 21, and the user's home directory unchanged (746 files before and after). The kit is not reproducible bit for bit (BACKUP records dates); the contents are.