The z390 Portable Mainframe Macro Assembler and Emulator
includes the following ZSTRMAC structured programming support
tools:
Structured
Programming Extensions (SPE's)
for use in coding structured conditional macro
code z390 Macro support has been extended to allow coding
mainframe conditional macro code using the following structured
programming extensions to the standard HLASM conditional macro
language:
- Alternate selection of code blocks
- AIF (expression)
- execute the following block of code if expression is true
- AELSEIF (expression) - end prior block and execute
following block if expression is true
- AELSE
- end prior block and execute following block
if prior AIF and AELSEIF false
- AEND
- end last block for AIF at current level of nesting
- Repeat execution of code block
- AWHILE (expression) - repeat following code block
while expression is true (test at beginning)
- AEXIT AWHILE - exit to end of inner most AWHILE
(for exceptions within nested AIF)
- AEND - end block of code for AWHILE at current level
of nesting
- AUNTIL (expression) - repeat following code block
until expression is true (test at end)
- AEXIT AUNTIL - exit to end of inner most AUNTIL
(for exceptions within nested AIF)
- AEND - end block of code for AUNTIL at current level
of nesting
- Perform code block
- ACALL name - call the named code block and return to next
instruction
- AENTRY name - define start of performed block of code (skip
over if
entered sequentially)
- AEXIT AENTRY - exit from AENTRY block of code (for
exceptions within nested AIF)
- AEND
- end the current performed code block and exit to next
statement after APM
- Perform selection of code blocks based on index
from 0 to 255
- ACASE (expression) - execute selected block
based on value of index expression
- AWHEN values
- define end of previous block and start of code block
for index values
- values can be decimal (0-255), character C'?', or
hex X'??'
- one or more values may be specified separated
by commas
- a range of values may be specified as (value1,value2)
- for example AWHEN (C'0',C'9') defines EBCDIC
digits 240-249
- AEXIT ACASE - exit to end of current ACASE
(for exceptions within nested AIF)
- AELSE - define optional code block if no AWHEN
block defined for current index
- AEND - end code block for ACASE
- Additional extension to indent label field by
preceding with colon (:)
- Release Log:
- v1.4.02e - a translator has been added (linklib\zstrmac.mlc) which will read structured
macro assembler source code from SYSUT1 and write standard HLASM
macro assembler source code
on SYSUT2
- v1.4.03 the support is included in the z390 macro processor so no separate translation
will be required to use the extensions to write structured macro
code. The mz390 macro processor will perform the translation
automatically during source input if option ZSTRMAC is on
- v1.4.03a - ASELECT changed to ACASE and APM changed to
ACALL, and lower case support
- v1.4.03b - SPM's upgraded to structured form using SPE's
and SELECT and CASENTRY added
The following source programs are included for general use:
- linklib\ZSTRMAC.ZSM - structured translator
which can be translated to standard HLASM compatible code using
itself on z390 v1.4.03+ or using the bootstrap version which is
HLASM compatible
rt\test\STRMAC1.MLC. Using either method, the
generated HLASM compatible translator is here
linklib\ZSTRMAC.TXT.
-
ZSTRMAC.BAT - command using %1 to set SYSUT1 input and %2 to
set SYSUT2 output and translate structured macro assembler to
standard HLASM macro assembler.
- ZSTRSPM.BAT - command to translate all the SPM's in z390\mac
directory to HLASM compatible code versions in z390\mac\spm directory
using calls to the ZSTRMAC.BAT translator command.
The following regression test programs are included:
- rt\test\ZSTRMAC1.MLC - bootstrap version of translator
written in standard HLASM.
- rt\test\ZSTRMAC2.ZSM - structured version of the
translator which uses all the structures.
- rt\test\TESTSPE1.ZSM - test program for ZSTRMAC1 with
all the basic structures.
- rt\test\TESTSPE2.ZSM
- test program for ZSTRMAC2 with all the basic structures in
lower case
- rt\test\TESTSPE3.ZSM - test of all 256 ACASE values
using all forms of AWHEN operands
- rt\test\TESTSPE4.ZSM - test error messages
The following demo programs using SPE's are include:
- demo\DEMOM8Q1.ZSM - solve 8 queens chess problem suing
recursive structured macro
The following z390 utility programs using SPE's are
included:
- linklib\RTGENDIR.MLC - read Windows directory listing and
create list of file names
- linklib\RTGENCMP.MLC - read merged list of files from 2
directories and generate compare commands
- linklib\RTGENDIF.MLC - read difference files and generate
erase commands for identical files
The following z390 system macros have been structured using
the SPE's:
- EQUREGS - generate EQU symbols if not already generated
for GPR and FPR registers
- ZCLOSE - close files (called from CLOSE and other user
macros in concatenated directories)
- ZOPEN - open files (called from OPEN and other user
macros in concatenated directories)
- (See all the structured SPM macros below)
Structured
Programming Macros (SPM's)
for use in coding
structured assembler compatible with HLASM
z390 startmg with
PTF v1403b includes the following set of Structured Programming Macros
(SPM's) in the z390\mac directory:
- IF, ELSEIF, ELSE, ENDIF - alternate selection
- DO, ENDDO - iteration
- SELECT, WHEN, OTHRWISE, ENDSEL - selection by value
using compares (v1403b first release)
- CASENTRY, CASE, ENDCASE - selection by value using
branch table (v1403b first release)
- PM, PENTRY, PEXIT - perform block of code and return
to next instruction
- ASMMSP.CPY - copybook for compatibility with
HLASM programs that require this copybook
- ZSTRGBL.CPY - copybook included in each SPM with
shared global variables
- ZSTREQU - macro called from ZSTRGBL to define shared
EQU's for condition code operands
These macros have been updated from the original public domain
macros in the
SHARE CBT tape #177 dated 1978. All these macros
have been updated to use SPE structured programming macro
extensions to eliminate all macro labels and use of AGO's.
Also included are translated versions of all the structured
SPM's in the z390\mac\spm directory. The translated
version are for use on systems with HLASM or other mainframe
assemblers which do not yet support the SPE's.
The following regression test programs are included:
- rt\test\TESTSPM1.MLC - test IF, DO, SELECT, and
CASENTRY structures (v1403b first release)
The following z390 utilities are written in structured
form using these SPM's:
- linklib\REPRO.MLC - VSAM load and unload utility
- linklib\SUPERZAP.MLC - dump and path file utility
- linklib\FPCONMFC.MLC - interface between z390
BFP/DFP/HFP regression tests and the mainframe compatible
external format conversion routine linklib\FPCONVRT.MAC
contributed by David Bond.
The ZSTRMAC1.MLC
bootstrap conditional macro code program is the last unstructured macro code program I
ever intend to write with 169 explicit macro labels. The
structured version has no labels, and I would submit that it is
significantly easier to read and maintain using ACALL to reduce the logic down into small logical blocks.
Any and all feedback is welcome.
Send comments and suggestions to
Don Higgins. |