retired mainframer wrote

<begin extract>
When you find a macro construct that handles non-self-defining terms
properly, let us know.
</end extract>

It is not at all clear to me what this means.  The macro language
"handles" many kinds of entities that are not self-defining terms.
If, however, it means what I suspect that it means then a trivial
variant of one of Robert Ngan's examples, viz.,

WorkArea DSECT
WORD     DS    F
FOO      DS    X
BAR      DS    Y
Alength EQU *-Work
&abytes seta Alength

illustrates how to assign the length of a [sub]sequence of
instructions and/or constants to an arithmetic set symbol.  As Mr.
Ngan points out, Alength needs to have been given a value before that
value is assigned to the [here local] arithmetic set symbol &abytes,
but this is not an unusual requirement in a statement-level procedural
language.

Assuming, as Mr. Ngan suggests, that a mechanism for making the value
of &abytes availkable to another macro is sought, a better scheme
would use a created global arithmetic set symbol, as in

|&wabyid setc '__work_area_bytes_identifier__'
|          gbla  &(&wabyid)
| . . .
|&(&wabyid) seta &abytes

after which the identifier &wabyid could be supplied to other macros,
typically as the value of one of their keyword parameters, as in the
skeletal code

|             macro
|             GUBBINS &work_bytes_id=,  . . .
| . . .
|             gbla   &(&work_bytes_id)

Doing so would, minimally, eliminate the need to 1) convert the value
of &abytes into a numeric character one and then 2) to convert it back
into an arithmetic one within the invoked macro.   (This notation
looks complicated the first few times it is encountered, but it is in
fact trivial and comes to seem so very quickly.)

John Gilmore, Ashland, MA 01721 - USA

Reply via email to