Thanks everyone for the input. Abe, I'm still studying yours. Jon, thanks for the ideas, I wound up with a variation on yours:
MACRO &LABEL KEYFIELD &NAME,&FIELD,&TYPE=C,&DSECT=NO AIF ('&DSECT' EQ 'YES').KEYFIELD_DSECT &DC SETC 'DC' &UID SETC '&SYSNDX' Unique for each CSECT &NAMEVAL SETC '''&NAME''' &DISPVAL SETC '(&FIELD.-BASE)' &LENVAL SETC '(L''&FIELD)' &TYPEVAL SETC '''&TYPE''' &LABEL DS 0F AGO .KEYFIELD_GEN .KEYFIELD_DSECT ANOP , &DC SETC 'DS' &UID SETC '' &NAMEVAL SETC '' &DISPVAL SETC '' &LENVAL SETC '' &TYPEVAL SETC '' KEYFIELD DSECT , .KEYFIELD_GEN ANOP , KEYNAME&UID &DC CL8&NAMEVAL KEYDISP&UID &DC A&DISPVAL OFFSET TO FIELD KEYDLEN&UID &DC A&LENVAL FIELD LENGTH KEYTYPE&UID &DC CL1&TYPEVAL FIELD TYPE DS 0F AIF ('&DSECT' EQ 'NO').KEYFIELD_END KEYLEN EQU *-KEYFIELD .KEYFIELD_END ANOP , MEND It winds up potentially adding a lot to the symbol table but is much clearer (in my opinion) than what I originally had. *Mark* On Sun, Jun 22, 2025 at 12:36 AM Jon Perryman <jperr...@pacbell.net> wrote: > On Fri, 20 Jun 2025 10:38:20 -0500, Mark Hammack <mark.hamm...@gmail.com> > wrote: > > >This is how I'm creating "anonymous" fields in the code expansion > > There's no upside to having anonymous fields. You don't see anyone > converting unreferenced labels in DSECTs to anonymous. For CSECT labels, > why eliminate the label as long as it is unique. > > Here's how I would code this but it's not tested. Doubleword alignment to > future proof for 64 bit addresses. > > > MACRO , > >&LABEL KEYFIELD &NAME,&FIELD,&TYPE=C,&DSECT=NO > > > > AIF ('&DSECT' EQ 'YES').KEYFIELD_DSECT > >UID SETA &SYSNDX CSECT needs unique label > >&DSECT0 SETC '' Use specified value > >&DSECTB SETC '' Use specified value > >&LABEL DS 0AD Doubleword addr align > > AGO .KEYFIELD_GEN > > > >.KEYFIELD_DSECT ANOP , > >UID SETC '' DSECT uses the label without of UID > >&DSECT0 SETC '0) ' DSECT does not specify this address > field, use 0) > >&DSECTB SETC ' '' ' DSECT does not specify this text, > use blank > >KEYFIELD DSECT , > >.KEYFIELD_GEN ANOP , > > > >KEYNAME&UID DC CL8'&dsectb.&NAME' > >KEYDISP&UID DC .A(&dsect0.&FIELD.-BASE) OFFSET TO > FIELD > >KEYDLEN&UID DC A(&dsect0.L''&FIELD) FIELD LENGTH > >KEYTYPE&UID DC CL1'&TYPE' FIELD TYPE > > DS 0AD doubleword address alignment > > > > AIF ('&DSECT' EQ 'NO').KEYFIELD_END > >KEYLEN EQU *-KEYFIELD > >.KEYFIELD_END ANOP , > > MEND > > >This is more or less what I am trying to do (second paragraph). Here's a > >"real world" example of what I am doing: > > > > MACRO > >&LABEL KEYFIELD &NAME,&FIELD,&TYPE=C,&DSECT=NO > > AIF ('&DSECT' EQ 'YES').KEYFIELD_DSECT > >&N SETC '&NAME' > >&F SETC '&FIELD.-BASE' > >&L SETC 'L''&FIELD' > >&KEYNAME SETC ' ' > >&KEYDISP SETC ' ' > >&KEYDLEN SETC ' ' > >&KEYTYPE SETC ' ' > > > >&LABEL DS 0F > > AGO .KEYFIELD_GEN > > > >.KEYFIELD_DSECT ANOP , > >&N SETC ' ' > >&F SETC '0' > >&L SETC '0' > >&KEYNAME SETC 'KEYNAME ' > >&KEYDISP SETC 'KEYDISP ' > >&KEYDLEN SETC 'KEYDLEN ' > >&KEYTYPE SETC 'KEYTYPE ' > >KEYFIELD DSECT , > > > >.KEYFIELD_GEN ANOP , > >&KEYNAME DC CL8'&N' > >&KEYDISP DC A(&F) OFFSET TO FIELD > >&KEYDLEN DC A(&L) FIELD LENGTH > >&KEYTYPE DC CL1'&TYPE' FIELD TYPE > > DS 0F > > AIF ('&DSECT' EQ 'NO').KEYFIELD_END > >KEYLEN EQU *-KEYFIELD > >.KEYFIELD_END ANOP , > > MEND >