You could even use the &DSECT variable to optionally carry the label for
the DSECT.

         MACRO
&LABEL   MYMACRO VALUE,&DSECT=NO
         AIF   ('&DSECT' EQ 'NO').GEN
         AIF   ('&DSECT' NE 'YES').DSECT
&DSECT   SETC 'MYMACRO'
.DSECT   ANOP  ,
&DSECT   DSECT ,
.GEN     ANOP  ,
&LABEL   DC    A(VALUE)
         MEND

Sincerely,

Dave Clark
--
int.ext: 91078
direct: (937) 531-6378
home: (937) 751-3300

Winsupply Group Services
3110 Kettering Boulevard
Dayton, Ohio  45439  USA
(937) 294-5331


On Thu, Jun 19, 2025 at 2:30 PM David Clark <dlcl...@winsupply.com> wrote:

> You don't give a use-case example.  So, it is hard to suggest a
> coding solution.  But, to my imagination, I would just code it along these
> lines.
>
>          MACRO
> &LABEL   MYMACRO VALUE,&DSECT=NO
>          AIF   ('&DSECT' NE 'YES').GEN
> MYMACRO  DSECT ,
> .GEN     ANOP  ,
> &LABEL   DC    A(VALUE)
>          MEND
>
> If you want to prevent accidental duplicate DSECT headers being generated,
> just use a global variable boolean test to bypass it as needed.
>
> Sincerely,
>
> Dave Clark
> --
> int.ext: 91078
> direct: (937) 531-6378
> home: (937) 751-3300
>
> Winsupply Group Services
> 3110 Kettering Boulevard
> Dayton, Ohio  45439  USA
> (937) 294-5331
>
>
> On Thu, Jun 19, 2025 at 1:21 PM Mark Hammack <
> 00001b4f3fed68ca-dmarc-requ...@listserv.uga.edu> wrote:
>
>> I just read Ed Jaffe's presentation from Share where he mentioned that
>> they
>> have some macros that not only generate a DSECT but using the same macro,
>> generate data in the program.  I can find (and have a few) examples of
>> doing that when the data occurs once in a program but am drawing a blank
>> on
>> a good way to do that for multiple occurrences of the macro.
>>
>> I've come up with two solutions but think there has to be a better way.
>> The first solution is to have a separate section in the macro for the
>> DSECT
>> vs. the code generation such as:
>>
>>      MACRO
>>      MYMACRO VALUE,&DSECT=NO
>>      AIF ('&DSECT' EQ 'YES').DSECT
>>      DC     A(VALUE)
>>      MEXIT
>> .DSECT ANOP ,
>> MYMACRO DSECT ,
>> MYVALUE DS A
>>      MEND
>>
>> The problem with this is keeping the two sections 'in sync'.  We've run
>> into issues where the code gen part was updated but not the DSECT part or
>> vice versa.
>>
>> The second solution works but is kind of 'ugly':
>>
>>      MACRO
>>      MYMACRO VALUE,&DSECT=NO
>>      AIF  ('&DSECT' EQ 'YES').DSECT
>> &V SETC '&VALUE'
>> &LAB SETC '        '
>>      AGO .GEN
>> .DSECT ANOP ,
>> &V SETC '0'
>> &LAB SETC 'MYVALUE'
>> MYMACRO DSECT ,
>> .GEN ANOP ,
>> &LAB   DC A('&V')
>>     MEND
>>
>> This works ok for mapping small amounts of data, but would become unwieldy
>> with more than a few entries (few is relative to how patient you are).
>> Fortunately, the cases where this is convenient (table entries) tend to
>> only have a few fields (in my case).  It also gets to be a bit crazy if
>> there are positional and named variables.
>>
>> Looking through SYS1.MACLIB and SYS1.MODGEN, it looks like the macros are
>> such that there are separate macros for generating a table entry and the
>> DSECT or IBM assumes the macro will only be used one time in a program.
>>
>> Sorry for the formatting. Limitations of Gmail.
>>
>>
>> *Mark Hammack*
>> Systemware, Inc.
>> mark.hamm...@gmail.com
>> 214-478-0955 (c)
>>
>

Reply via email to