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
