John, Thank you for that example, it helps a lot. The example I gave was generating DC lines for the sake of figuring out the proper syntax. My real goal is a bit different.
I have a static list of 64 flag bit names (each one like Flag_A EQU X'80'). I want to create a flag-test macro FTEST to test one or more of those bit flags against a set of 8 flag bytes, each named FLAGn, 1 <= n <= 8. So if Flag_A is defined as a bit in Flag1, I will generate a test like: FTEST Somewhere,Flag_A + TM Flag1,Flag_A + BO Somewhere And if a list of multiple flag names are provided to the test macro, the result should resemble: FTEST Somewhere, (Flag_P,Flag_H,Flag_G,Flag_A) + TM Flag1,Flag_A+Flag_G+Flag_H + BO Somewhere + TM Flag2,Flag_P + BO Somewhere Obviously the trick is to associate a flag number with each name, and to sort the list of flag names provided to the FTEST macro by the flag byte number so that all tests against the same flag byte are grouped together. Also, other than a manually created list of GBLA definitions and SETA initializations for the flag names (like GBLA &Flag_A and &Flag_A SETA 1), is it possible to create a loop that dynamically computes the flag number for each name (where the flag names are stored in the proper order in an initialized GBLC array) and dynamically creates the GBLA and SETA lines? I.E., is it legal to loop over GBLA as well as SETA statements? Have you solved a problem like this already, or can you suggest an approach that will work for such a macro? Thank you again for your clear example. Peter -----Original Message----- From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On Behalf Of John Gilmore Sent: Saturday, October 04, 2014 1:05 PM To: ASSEMBLER-LIST@LISTSERV.UGA.EDU Subject: Re: Syntax for using created SET symbols in a SETC value? Consider |&F1id setc '__F1' --array 1 identifier |&F2id setc '__F2' --array 2 identifier |&F3id setc '__F3' --array 3 identifier | gblc &(&F1id)(1) --declare array 1 w/o giving it elements | gblc &(&F2id)(1) --declare array 2 w/o giving it elements | gblc &(&F3id)(1) --declare array 3 w/o giving it elements |&(&F1id)(1) setc 'a','b','c' --initialize/create first 3 elements of array 1 |&(&F2id)(1) setc 'd','e','f' --initialize/create first 3 elements of array 2 |&(&F3id)(1) setc 'g','h','i' --initialize/create first 3 elements of array 3 |&idaid(1) setc '&F1id','&F2id'.'&F3id' --array of array identifiers |&arraysn seta n'&idaid --number of array identifiers |&i seta 0 --initialize arrays index |.arrays_loop anop , --top of arrays loop |&i seta &i+1 --increment arrays index |&eoa setb (&i gt &arraysn) --arrays exhausted? | aif (&eoa).arrays_lend --if so, leave arrays loop |&aident setc '&(&idaid)(&i)' --identifier of array &i |&elemsn seta n'&(&aident) --element count array &i |&j seta 0 --initialize elements index |.elems_loop --top of array &i elements loop |&j seta &j+1 --increment elements index |&eoe setb (&j gt &elemsn) --elements of array &i exhausted? | aif (&eoe).elems_lend --if so, leave elements loop |&label setc 'F'.'&i'.'&j' --DC label |&target setc '&(&aident)(&j)' --DC target value |&label DC C'&target' | ago .elems_loop --next element da capo |.elems_lend anop , --bottom of elements loop | ago .arrays_loop --next array da capo |.arrays_lend anop , --bottom of arrays loop | . . . The only thing problematic about this is the statement |&label setc 'F'.'&i'.'&j' --DC label Suppose you have 0 < &i < 15 0 < &j < 30 within these loops. Then element 29 of array 1 will have the label 'F'.'1'.'29' or F129, and element 9 of array 12 will have the label 'F'.'12'.'9' = F129 too. This sort of thing can be dealt with easily using the A2D builtin function and leading-zeros padding to ensure that the character representations of &i all have the same number of digits and that those of &j all have the same perhaps different number of digits. I can elaborate on this if it seems opaque. What needs to be emphasized about these constructions is that while they seem to be intolerably detail-ridden when first encountered one's cat brain takes over very quickly. They become very easy to use with practice. John Gilmore, Ashland, MA 01721 - USA This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system.