You code the minimal valid source "program" that includes the COPY member.
Something like
MYPROG CSECT
COPY member
END
Then you process the SYSADATA from that assembly.
Here is a sanitized version of my job:
//ASSEMBLE EXEC PGM=ASMA90,COND=(12,LE),REGION=2M,
// PARM='ADATA,TERM'
//SYSLIB DD DSN=CEE.SCEEMAC,DISP=SHR LE MACROS
// DD DISP=SHR,DSN=CICSTS55.CICS.SDFHMAC CICS
// DD DSN=TCPIP.SEZANMAC,DISP=SHR
// DD DISP=SHR,DSN=SYS1.MACLIB System macros
//SYSPUNCH DD DUMMY
//SYSIN DD *
EZASMF77
END
/*
//SYSLIN DD DUMMY
//SYSADATA DD SPACE=(TRK,(15,15)),DISP=(NEW,PASS)
//SYSPRINT DD SYSOUT=*
//SYSTERM DD SYSOUT=*
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(2,2))
//*
//* Process the ADATA
//CZADEFBL EXEC PGM=myprogram,
// PARM=(...
// )
//SYSADATA DD DSN=*.ASSEMBLE.SYSADATA,DISP=(OLD,DELETE)
Etc.
Charles
-----Original Message-----
From: IBM Mainframe Assembler List [mailto:[email protected]] On
Behalf Of Joseph Reichman
Sent: Saturday, January 1, 2022 5:12 PM
To: [email protected]
Subject: Re: Determining a group item
I hear you only thing is there isn’t a sysadata file for the copybooks, they
are included in programs. The production programs have sysadata files. So I
would have to look for record X’0020’ esid records ?
> On Jan 1, 2022, at 7:56 PM, Charles Mills <[email protected]> wrote:
>
> ADATA is not "simple" but I think it is the right answer to problems of the
> general form "I have a DSECT in HLASM. I want to output equivalent
> information in another programming language."
>
> I did exactly that. I wrote a program -- good enough to be distributed as
> part of a commercial product, albeit with an "as-is" disclaimer -- that
> processed SMF record and similar DSECTs and output equivalent information in
> a proprietary schema language. SMF record DSECTs are quite complex, with
> redefinitions and symbols defined arguably incorrectly (such as integer
> fields defined as XL4 or CL4). I do not own the rights to the code or I would
> happily share it with you.
>
> I wrote it in C++ but it could have been written in assembler. (An added
> complexity was that I wanted it to be able to run in a debugger in Windows,
> so it had to deal with both endian issues and EBCDIC-ASCII in that situation.
> Also RECFM=V records, which are not very Windows-friendly.) It was not a
> trivial project, and I did not get it all right on the first try, but it
> ultimately worked well, worked more or less perfectly for what it was
> intended to do.
>
> One interesting attribute of ADATA is that you get the complete source, so
> you can include any HLASM comments appropriately in your output.
>
> I started by writing an "intelligent dump" program to display the contents of
> an ADATA file, and then refined that until it was producing the desired
> output (with the dump available as a debugging option in the finished
> program).
>
> Charles
>
>
> -----Original Message-----
> From: IBM Mainframe Assembler List [mailto:[email protected]]
> On Behalf Of Joseph Reichman
> Sent: Thursday, December 30, 2021 3:25 PM
> To: [email protected]
> Subject: Re: Determining a group item
>
> You think processing adata is simpler I mean they data names are not in
> order
>
> I could get what I want with esid and offset
> Doing it from the assembler was thinking of using AREAD but I am sure you
> know better than me
>
> Thank you
>
>
>
>> On Dec 30, 2021, at 5:41 PM, Bob Raicer <[email protected]> wrote:
>>
>> I'm not clear on what you (Joseph Reichman) are attempting to
>> accomplish. If you are going to produce a Rexx program that does
>> something with symbols which appear in some form of an assembler
>> data structure, then you could do something like the example shown
>> below and (as others have suggested) subsequently process the
>> SYSADATA file with the Rexx program.
>>
>>
>> D-Loc Object Code Addr1 Addr2 Stmt Source Statement
>> 00000000 00000000 00000046 1 TEST DSECT ,
>> 00000000 4040404040404040 2 X1 DC 7CL10' '
>> 00000046 3 X2 DC 0CL20' '
>> 00000000 00000046 4 GROUP1 EQU X1,*-X1,C'C'
>> 5 End ,
>>
>> Symbol Cross Reference
>> Symbol Length Value Id Type Asm Program Defn References
>> GROUP1 70 00000000 FFFFFFFF C 4
>> TEST 1 00000000 FFFFFFFF J 1
>> X1 10 00000000 FFFFFFFF C C 2 4
>> X2 20 00000046 FFFFFFFF C C 3
>>
>> Dsect Cross Reference
>> Dsect Length Id Defn Con Member
>> TEST 00000046 FFFFFFFF 1 PRIMARY INPUT
>>
>>
>> Here is an extraction from the High Level Assembler Language
>> Reference (V1.6) regarding length attributes of symbols when the
>> "Duplication Factor" is zero:
>>
>> * A duplication factor of zero is permitted, except for literals,
>> * with the following results:
>> *
>> * - No value is assembled.
>> *
>> * - Alignment is forced according to the type of constant
>> * specified, if no length attribute is present.
>> *
>> * - The length attribute of the symbol naming the constant is
>> * established according to the implicitly or explicitly specified
>> * length.
>>
>> For reasons lost in antiquity, an explicitly specified Length value
>> must be positive, e.g., CL0' ' is invalid.
>>
>> Note that:
>> - The Length Attribute of symbol X1 is 10 (decimal) even though it
>> occupies 70 bytes.
>>
>> - The Length Attribute of symbol X2 is 20 (decimal) even though it
>> occupies zero bytes.
>>
>> - The GROUP1 equate gets you the origin location and proper length
>> of a collection of items.
>>
>> There are all kinds of quirks and inconsistencies in how the assembler
>> treats the length attributes of symbols. For example, the length
>> attribute of a DSECT (e.g., L'TEST in this coding example) is always 1
>> even though the proper length is reflected in the DSECT Cross Reference.