VM/CMS emulator for REXX - Version 2.21
SUMMARY
- WHAT IS EVMPR
- RECOMMENDED HARDWARE
- SOFTWARE REQUIREMENTS
- VM/CMS SUPPORTED COMMANDS
- BINARY FILE PROCESSING USING PIPES
- INTEGRATING VM/CMS PROCEDURES IN EVMPR
- INCIDENTS
1 - What is EVMPR
EVMPR is a VM/CMS REXX emulation runtime for Unix/Windows running "as is" your original CMS REXX programs on inexpensive Unix/Windows and shooting your monthly IBM host fees.
It is composed of :
- a command runtime implemented by a shared library
- a command set simulating some specific VM/CMS features, implemented by programs and scripts.
- For NT platform, gzip and gunzip programs (ported and distributed by HHNS under GPL Zlib license)
2 - Recommanded Hardware
Windows and Linux platform
- CPU Pentium III 400 Mhz minimum
- necessary storage capacity
IBM AIX platform
- CPU 53P minimum
- necessary storage capacity
3 - Pre-required Software
Windows/NT platform :
- Windows/NT4 Server US, Service Pack 4 or 5
- Ressource Kit NT4
- Object Rexx IBM for Windows V1.03
- FTP and RSH services for batch automation
AIX platform
- AIX V4.3 minimum
- Object Rexx IBM for AIX V6
LINUX platform
- LINUX kernel 2.4 and above
- Run time libc5
- Object Rexx IBM for LINUX
Other UNIX platform
- We can port to any POSIX UNIX
4 - VM/CMS supported commands
- syntax :
"GLOBALV SELECT env SETP variable value""GLOBALV SELECT env GET variable"
- limitations : in this version, environment is not saved, nor processed.
It is only simulated during the procedure. - example :
"GLOBALV SELECT MYAPPL SETP RETRC" retrc"GLOBALV SELECT MYAPPL GET RETRC"
- syntax : "EXEC command arguments"
- implementation :
Searches 'PATH' system variable for :- command.EXEC- command.REXXthen transmits the command to system
- limitations : Operating System's limitations
VM/CMS filesystem is simulated :
'fn ft fm' notation is accepted as is by supported commands, Windows/Unix traditionnal 'path' standing as 'filemode' (default : ./ or .\).
examples : 'name extens /path/data'( VM) = '/path/data/name.extens' (Unix)
'name extens' (VM) = './name.extens' (Unix)
Limitations are operating system's limitations (metasymbols % or $, &, ...)
The wildcard notation (*) is supported except in the filemode.
- syntax : "ERASE fn ft fm"
- limitations : Operating System's limitations
- examples :
"ERASE AB* *CD* /path/data " (Unix)
"ERASE AB* *CD* U:\path\data" (Windows)
- syntax : "RENAME fn1 ft1 fm fn2 ft2 fm"
- abbrev. : "REN"
- limitations : Operating System's limitations
- examples :
"REN ABC DEF /path/data UVW = =" (Unix)
"REN ABC DEF /path/data = -DEF =" (Unix)
"REN ABC DEF U:\path\data XYZ = =" (Windows)
"REN ABC DEF U:\path\data = DEF2 =" (Windows)
- syntax : "COPY fn1 ft1 fm1 fn2 ft2 fm2"
- limitations : Operating System's limitations
- examples :
"COPY ABC DEF /path/data UVW = =" (Unix)
"COPY ABC DEF /path/data = = /tmp" (Unix)
"COPY ABC DEF U:\path\data XYZ = = " (Windows)
"COPY ABC DEF U:\path\data = = V:\tmp" (Windows)
- syntax : "STATE fn ft fm"
- limitations : no generic metacharacter ('*', '?', '=') in filemode
- examples :
"STATE ABC DEF /path/data" (Unix)
"STATE *ABC* * /path/data" (Unix)
"STATE ABC DEF U:\path\data" (Windows)
"STATE *ABC* * U:\path\data" (Windows)
if rc = 28 then ... /* does not exist */
- syntax : "LISTFILE fn ft fm [( ALL/DATE/LABEL STACK/LIFO ]"
- abbrev. : "LISTF"
- limitations : Operating System's limitations
- examples :
"LISTF ABC DEF /path/data ( ALL STACK" (Unix)
"LISTF ABC DEF U:\path\data (DATE LIFO" (Windows)
- DISKR function syntax :
"EXECIO n|* DISKR fn ft fm""EXECIO n|* DISKR fn ft fm [( LIFO ]""EXECIO n|* DISKR fn ft fm ( STEM stname]""EXECIO 1 DISKR fn ft fm ( VAR varname]"
- DISKW function syntax :
"EXECIO n|* DISKW fn ft fm""EXECIO n|* DISKW fn ft fm ( STEM stname]""EXECIO 1 DISKW fn ft fm ( VAR varname]""EXECIO 1 DISKW fn ft fm ( CONST xxxxxx"
- CP function syntax :
"EXECIO n|* CP ( [STACK | LIFO | FIFO ] CONST xxxxxx ..."
- limitations :
on current version, data files are ascii text, binary is not processedCP command simulation is made by submiting the command 'as is' to the system, then redirecting results (standard output) into stack
- examples :
EXECIO 5 DISKR fn1 ft1 fm1 ( STEM S1."EXECIO 1 DISKR fn1 ft1 fm1 ( VAR VVV"EXECIO * DISKR fn1 ft1 fm1EXECIO * DISKW fn2 ft2 fm2EXECIO * DISKW fn2 ft2 fm2 ( STEM S1.EXECIO 1 DISKW fn2 ft2 fm2 ( VAR vvvEXECIO 1 DISKW fn3 ft3 fm3 ( CONST this is a litteralEXECIO * CP ( CONST dir /oEXECIO * CP ( LIFO CONST grep aaa /tmp/ffff.eeeeeEXECIO * CP ( CONST df -v
Pipes and Pipe stages (filters)
VM/CMS Pipe is implemented by EVMPR with Unix and Windows equivalents :
Each pipe stage is a filter that reads on standard input (stdin) and writes to standard output (stdout).
This makes it possible to replace a VM/CMS missing stage by its Unix/Windows equivalent, generaly present inside the system or easy to make.
When these stages are REXX procedure REXX, they are called by :
"rexx stage.REXX [arguments ...".
PIPE command
- syntax:
"PIPE < fn1 ft1 fm1 | stage1 | stage2 ... | > fn2 ft2 fm2""PIPE | STEM XXX. | ....""PIPE | VAR VVV | ....""PIPE < fn1 ft1 fm1 | stage1 | stage2 ... | STEM XXX.""PIPE < fn1 ft1 fm1 | stage1 | stage2 ... | VAR VVV"
- limitations : only above specified syntaxes are accepted.
- check EVMPR supported Stage list below.
- examples :
"PIPE < ABCDE DATA | take 1 | VAR abcde_data"
"PIPE <" fn ft fm "| drop 1 | STEM abc."
"PIPE < ABC DATA | rexx prog1.rex ( opt1 | > ABC LOGFILE"
- syntax : "ADDSTREAM OUTPUT alias"
- limitations : the INPUT direction is not implemented on this version.
- example : check the SELECT command below
- syntax : "ADDPIPE *.OUTPUT.alias: | > fn ft fm"
- limitations :
- file ('fn ft fm') is associated to alias and open for output
- example : check the SELECT command below
- syntax : "ENDPIPE alias"
- limitations : immediate and definitive close of file associated to alias
- syntax : "SELECT OUTPUT alias"
- limitations : the INPUT direction is not implemented on this version.
- the file associated to 'alias' becomes the current output file
- example :
"ADDSTREAM OUTPUT myout1"
"ADDPIPE *.OUTPUT.myout1 : | > F123456 RESULT ."
"SELECT OUTPUT myout1"
"OUTPUT 1rst line of file F123456.RESULT"
...
"ENDPIPE myout1"

