- Installation Guide
- Introduction
- Prerequisites
- Preparation of your target MVS38J System
- Installation
- Step 0 - Unzip BREXX/370 Installation File
- Step 1 - Upload XMIT File
- Step 2 - Unpack XMIT File
- Step 3 - Submit $UNPACK JCL of the unpacked Library
- Step 4 - Submit $INSTALL JCL for the Standard Installation
- Step 4A- Submit $INSTAPF JCL for the Authorised Installation
- Step 5 - Submit $TESTRX JCL of the unpacked Library
- Step 6 - Create the Key/Value Database (optional)
- Step 7 - Submit $CLEANUP JCL of the unpacked Library
- Step 8 - ADD BREXX Libraries into TSO Logon
- Step 9 - Your Tests
- Step 9 - Remove old BREXX Libraries (optional)
- Additional Settings (optional)
- Useful functions
- Tokens and Terms
- Expressions
- Instructions
- Templates for ARG, PULL, and PARSE
- Compound Variable Names
- Special Variables
- Interactive Debugging
- Built-in Functions
- Calling external REXX Scripts or Functions
- BREXX MVS Functions
- Added BREXX Kernel functions and Commands
- Functions
ABEND()
AFTER()
A2E()
E2A()
BEFORE()
BLDL()
BASE64ENC()
BASE64DEC()
B2C()
C2B()
C2U()
D2P()
P2D()
CEIL()
CONSOLE()
ENCRYPT()
DECRYPT()
DEFINED()
DUMPIT()
DUMPVAR()
DATE()
DATETIME()
Time()
STDATE()
FILTER()
FLOOR()
INT()
JOBINFO()
JOIN()
LEVEL()
ARGV()
LINKMVS()
LINKPGM()
LISTIT()
LOCK()
UNLOCK()
MEMORY()
MTT()
MTTSCAN()
RXCONSOL()
RXLIST()
NJE38CMD()
VLIST()
LASTWORD()
PEEKS()
PEEKA()
PEEKU()
RACAUTH()
RHASH()
ROUND()
ROTATE()
PUTSMF()
SUBMIT()
SPLIT()
SPLITBS()
EPOCHTIME()
EPOCH2DATE()
STIME()
USERID()
UPPER()
LOWER()
MOD()
LOADRX()
STCSTOP()
VERSION()
WAIT()
WORDDEL()
WORDINS()
WORDREP()
WTO()
XPULL()
GETDATA()
LCS()
- Functions
- GLOBAL Variables
- Dataset Functions
- TCP Functions
- TSO REXX Functions
- Array functions
- String Array Functions
- Integer Array Functions
- Integer Matrix
- Float Array
- Linked List functions
LLCREATE()
LLFREE()
LLCLEAR()
LLADD()
LLDEL()
LLINSERT()
LLGET()
LLSET()
LLCOPY()
LLENTRY()
LLLIST()
LLDETAILS()
LLDELINK()
LLLINK()
LLSORT()
LLWRITE()
LLREAD()
MCREATE()
MSET()
MGET()
MMULTIPLY()
MINVERT()
MTRANSPOSE()
MCOPY()
MNORMALISE()
MDELROW()
MDELCOL()
MPROPERTY()
MSCALAR()
MADD()
MSUBTRACT()
MPROD()
MSQR()
MINSCOL()
MFREE()
- Conversions between String Arrays, Linked Lists, and STEMS
- RXLIB functions
- Building TSO Commands
- Callable External Functions
- VSAM User’s Guide
- BREXX KEY/VALUE Database
- Formatted screens
- Application Guide
- Implementation Restrictions
- Migration and Upgrade Notices
- About
This user’s guide documents the BREXX standard functions from https://ftp.gwdg.de/pub/languages/rexx/brexx/html/rx.html as well as the changes and amendments to BREXX to be used on MVS 3.8j.
- BREXX has been developed by Vasilis Vlachoudis, who made it publicly available as freeware for non-commercial purposes.
- Jason Winter’s JCC Compiler for compiled BREXX
- JCC and the JCC-Library are owned and maintained by him. While not being freeware, Jason allows non-commercial usage and distribution of Software created using JCC through a relaxed license, as long as the complete source code always accompanies those distributions.
- Vasilis and Jason explicitly consented to make the JCC based version of BREXX available on TK4-. Thanks to both for their significant valuable contribution to the TK4- MVS 3.8j Tur(n)key system.
- The VSAM Interface is based on Steve Scott’s VSAM API.
- The FSS Part is based on Tommy sprinkle’s FSS - TSO Full-Screen Services
- Daniel Gaeta contributed his EXECIO implementation.
- The NJE38DIR load module was extracted out of Bob Polmanter’s NJE38 V2 modules
We wish to thank the following persons for patiently answering our questions and for their support and advice:
- Vasilis Vlachoudis
- Jürgen Winkelmann
- Jason Winter
- Wally Mclaughlin
- Greg Price
- Bob Polmanter
- Steve Scott
and many others!
The BREXX/370 Source Code can be found and downloaded at: https://github.com/mvslovers/brexx370/
BREXX stores numeric values in the appropriate type format. The benefit compared to save it as strings is a significant performance improvement during calculations. As the expensive string to numeric conversion before and vice versa after arithmetic operations is omitted; this allows speedy calculations without the required conversion overhead.
BREXX supports two numeric types:
-
Integer Integers are stored in 4-bytes a full word (LONG), this means their range is from -2,147,483,648 to +2,147,483,647
-
Decimal Numbers Decimal Numbers (decimal numbers with a fractional part) are represented in the double-precision floating-point format (doubleword), the length is 8-bytes consisting of an exponent and the significand (fraction). It consists of 56 bits for the fraction part, 7-bit exponent and one-bit for the sign. This representation is IBM specific and differs slightly from the IIEE 754 floating-point standard.
The precision of floating-point numbers is not as good as decimal packed numbers which are not supported in BREXX (nor in REXX). This means, for example, 2.0 might be stored as 19999999999999999e-17, or for 5.0 you will is stored as 50000000000000003e-17; this is not an error, but the usual behaviour for floating-point numbers. It is caused by the conversion between the numbers of base 10 to base two a bit-exact reversibility is not always given. This effect may build up during arithmetic calculations.