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.

Reply via email to