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

Reply via email to