Check your System Trace for a possible S0C4, the rightmost 3 bytes of whose instruction address are the same as the rightmost 3 bytes of the address of your 31-bit address EODAD routine. Maybe the EODAD's routine needs to be below the 16MB line. Maybe you didn't have the X'80000000' bit on in the 31-bit address of the EODAD routine.
Just guessing. Bill Fairchild Rocket Software -----Original Message----- From: IBM Mainframe Assembler List [mailto:[email protected]] On Behalf Of Farley, Peter x23353 Sent: Thursday, October 14, 2010 11:25 AM To: [email protected] Subject: EODAD ignored in DCBE for QSAM input file? Hi All, I'm not sure if this is the right forum for this question, but I thought I'd try here first anyway. I'm not sure what I'm doing wrong, but I'm sure I am. Any help you can provide is appreciated. I have an assembler I/O module in which I create a QSAM DCB and DCBE in dynamically obtained 24-bit storage and populate them appropriately from static versions. I then link the DCBE to the DCB (stored the DCBE address into the first word of the DCB) and store an above-the-line (31-bit) dynamic EODAD address into the DCBE at offset X'28'. All this is done with labels from the DCBD and IHADCBE macros, not hard-coded offsets. The static DCB used to initialize the dynamic DCB specifies only DSORG=PS,DEVD=DA,MACRF=GL,DDNAME=########. The static DCBE specifies only RMODE31=BUFF. I am able to open the DCB and GET records (record addresses, actually) successfully, but when I reach EOF on the file (e.g., on the 5th GET for a 4-record file) the EODAD is never taken, instead I get an S337 abend as if I had never populated the DCBE EODAD field. I have used zXDC to verify that the EODAD address is never executed by placing a breakpoint at the EODAD address. The breakpoint at EODAD is never tripped. Examining the dynamic DCB and DCBE in storage before and after the abend, I see that the DCBE EODAD address has the proper address for the routine I want to execute, and that the DCB EODAD address (3 bytes) has a value of X'000001'. I have done as much RTFM as I can find in the "Using Datasets" and "Macro Instructions for Datasets" manuals and it is all consistent: The DCBE EODAD address is supposed to override any address specified in the DCB EODAD address. So, what am I doing wrong here? Do I need to specify the DCBEODAD address as zero to make the DCBE EODAD address get used? Any and all help, RTFM pointers, etc. are welcome. Peter -- 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.
