Hi, Dave - As I read the docs, NOTE only works after a READ or WRITE. You'll get an invalid value if you use it after a FIND or POINT.
Gary -----Original Message----- From: IBM Mainframe Assembler List [mailto:[email protected]] On Behalf Of Thomas David Rivers Sent: Friday, January 8, 2016 2:31 PM To: [email protected] Subject: BPAM multiple members/one DCB and EODAD exit? I'm having a heck of a time reading multiple members from the same BPAM DCB... but not sequentially, trying to "skip around" in the members (for example, read one block of MEM1, one block of MEM2, back to MEM1 to read the next block, back to MEM2 to read the next block, etc...) This is input only. I'm using NOTE + FIND&POINT to switch between members. That is, when I need to switch to a different member, I remember the current TTR with a NOTE, then a I do a FIND for the other member and POINT to it's remembered TTR. As it happens, MEM1 only has one block, while MEM2 has many... Now - for my questions... This is the behavior I'm seeing with my operations (results in the comments): FIND MEM1 NOTE - returns TTR X'11B00' READ reads a short first block CHECK * <process block> NOTE - returns TTR X'11C00', remembers as the current TTR for MEM1 FIND MEM2 NOTE - returns TTR X'11000' READ correctly reads first block of MEM2 CHECK * <process block> NOTE - returns TTR X'11100' * * Return back to processing MEM1 * FIND MEM1 POINT X'11C00' Point back to remembered TTR for MEM1 NOTE <*** RETURNs X'11B00' - not the block I just POINTed to READ CHECK * Check drives my EOD exit, so END-OF-DATA is noted for MEM1 * * Return back to processing MEM2 * FIND MEM2 POINT X'11100' Point back to remembered TTR for MEM2 NOTE <*** RETURNSs X'11000' - not the block I just POINTed to READ CHECK <*** Drives EOD exit * END-OF-DATA noted for MEM2 So - my questions (that I hope someone can illuminate) are: 1) Why does the NOTE following a successful POINT indicate a different TTR (it seems to indicate the preceeding TTR.) 2) MEM2 has many more blocks in it, but my EOD exit is driven when attempting to read the 2nd block, even though I did a FIND and POINT to reposition. It seems once the EOD of a member is found, others suffer the same fate? I've gone through my code to look for errors (such as passing the wrong value to POINT, etc...) but nothing "obvious" appears wrong. And, I've verified that the EODAD is being driven on the subsequent read of MEM2. What I'm trying to do is keep the same DCB and process multiple members, "bouncing" between them; without suffering a new OPEN for each. I did some googling to see if I could find some sample code for this; but I've been unsuccessful. The IBM documentation seems to indicate this it the proper approach; but it's only mentioned under PDSEs... is it not valid for PDSs? I have code that can keep the same DCB open for reading more than one member of a PDS; but it reads the entire member before moving to the next.. and in this new situation I only want to read part of a member, and then return to it after reading part of a different member... Any pointers would be appreciated... - Many thanks! - - Dave Rivers - -- [email protected] Work: (919) 676-0847 Get your mainframe programming tools at http://www.dignus.com
