Yes, I had overlooked that BLDL requires a member name.

My comments were based on the following, written some 25+ years ago:

PDSRENMB CSECT START CONTROL SECTION 00003300 * 00003400 *********************************************************************** 00003500 ********************** MACROS ***************************************** 00003600 * 00003700 MACRO 00003800 &L READREC &FILE 00003900 &L GET &FILE READ &FILE RECORD 00004000 MVC INPUT(80),0(R1) MOVE FROM BUFFER TO INPUT AREA 00004100 MEND 00004200 * 00004300 MACRO 00004400 &L WRITEREC 00004500 &L PUT REPORTS,OUTPUT OUTPUT REPORT RECORD 00004600 MEND 00004700 * 00004800 *********************** END OF MACROS ********************************* 00004900 *********************************************************************** 00005000 * 00005100 ********************************************************************** 00005200 ******* INITIAL PROCESSING ******************************************* 00005300 ********************************************************************** 00005400 * 00005500 NAMEOFT EQU NAME-* 00005600 TTROFT EQU TTR-* 00005700 NEWNAMEOFT EQU N_NAME-* 00005800 KOFT EQU K-* 00005900 COFT EQU C-* 00006000 INPUTOFT EQU INPUT-* 00006100 * 00006200 BEGIN STM R14,R12,12(R13) SAVE REGISTERS 14->12 TO OFFSET 12 00006300 LR R11,R15 LOAD ENTRY POINT LOCATION INTO R11 00006400 USING PDSRENMB,R11 DEFINE R11 AS BASE REGISTER 00006500 ST R13,SAVEBLK+8 SAVEAREA BACKWARD POINTER 00006600 LR R6,R13 00006700 LA R13,SAVEBLK 00006800 ST R13,4(,R6) SAVEAREA FORWARD POINTER 00006900 * 00007000 *********************************************************************** 00007100 ******** START OF PROGRAM CODE PROPER ********************************* 00007200 *********************************************************************** 00007300 * 00007400 OPEN (SYSIN,(INPUT)) 00007500 L R4,=F'64' FOR COUNTING ¬> 64 CARDS 00007600 LA R9,0(,R11) FOR INDEXING MEMBER NAMES + BASE 00007700 S R9,=F'14' 00007800 LA R10,0(,R11) FOR INDEXING NEWNAMES + BASE 00007900 S R10,=F'8' 00008000 * 00008100 * DO UNTIL THERE ARE NO MORE SYSIN RECORDS 00008200 * 00008300 NEXT READREC SYSIN 00008400 LA R5,0(,R11) USE R5 AS PSEUDO BASE REG 00008500 LA R6,1 USE R6 AS INDEX INCREMENT 00008600 * 00008700 * 'MEMBER=' = 7 00008800 * ',' = 1 00008900 * 'NEWNAME=' = 8 00009000 * <MEMBERNAME> = 1 MIN 00009100 * <NEWNAME> = 1 MIN 00009200 * OFFSET = POSITION - 1 00009300 * 72-7-1-8-1-1-1=53 00009400 * 00009500 LA R7,53(,R11) USING R7 AS INDEX UPPER LIMIT FOR 00009600 * SYSIN CARD (UP TO COL 72 MAX). 00009700 * 00009800 * FIND 'MEMBER=' STRING IN CURRENT SYSIN CARD. 00009900 * 00010000 FINDM CLI INPUTOFT(R5),C'M' LOOK FOR CHAR 'M' AT CURRENT POS. 00010100 BE CHK1A 00010200 BXLE R5,R6,FINDM IF NOT FOUND TRY NEXT POSITION UP 00010300 B NOTFND 00010400 * 00010500 CHK1A CLC INPUTOFT(7,R5),=C'MEMBER=' IS IT 'MEMBER='? 00010600 BE OK1 00010700 BXLE R5,R6,FINDM NO: START AGAIN FROM NEXT POS. UP 00010800 B NOTFND 00010900 * 00011000 OK1 LA R5,7(,R5) YES: SHIFT UP TO READ NAME 00011100 ST R5,STRTMEM SAVE START POSITION OF NAME 00011200 LR R8,R5 AND IN R8 FOR "EX R12,MOVEMEM" 00011300 * 00011400 FINDC CLI INPUTOFT(R5),C',' LOOK FOR COMMA 00011500 BE CHK1B 00011600 BXLE R5,R6,FINDC NOT FOUND? SHIFT UP & TRY AGAIN 00011700 B NOTFND 00011800 * 00011900 CHK1B ST R5,ENDMEM FOUND: NOW CHECK MEMBER NAME 00012000 LR R12,R5 00012100 S R12,STRTMEM ENDMEM - STRTMEM = MEMNAME LENGTH 00012200 BE NOTFND 0 LENGTH NOT ALLOWED 00012300 C R12,=F'9' 00012400 BNL NOTFND LENGTH > 8 NOT ALLOWED 00012500 * 00012600 STH R12,LENMEM MEMNAME LENGTH IS OK: SAVE IT 00012700 MVC MEMNAME(8),BLANKS 00012800 BCTR R12,0 00012900 EX R12,MOVEMEM STORE MEMBER NAME FROM SYSIN CARD 00013000 LA R5,1(,R5) POINT TO CHAR AFTER COMMA 00013100 * 00013200 FINDA CLC INPUTOFT(8,R5),=C'NEWNAME=' IS THIS 'NEWNAME='? 00013300 BE OK2 00013400 B NOTFND 00013500 * 00013600 OK2 LA R5,8(,R5) YES: POINT TO NEWNAME 00013700 ST R5,STRTNEW SAVE START OF NEWNAME OFFSET 00013800 LR R8,R5 AND IN R8 FOR "EX R12,MOVENEWN" 00013900 * 00014000 FINDB CLI INPUTOFT(R5),C' ' LOOK FOR BLANK CHAR AFTER NEWNAME= 00014100 BE CHK2 00014200 BXLE R5,R6,FINDB NOT FOUND? SHIFT UP & TRY AGAIN 00014300 B NOTFND 00014400 * 00014500 CHK2 ST R5,ENDNEW FOUND: NOW CHECK NEWNAME LENGTH 00014600 LR R12,R5 00014700 S R12,STRTNEW ENDNEW - STRTNEW = NEWNAME LENGTH 00014800 BE NOTFND 0 LENGTH NOT ALLOWED 00014900 C R12,=F'9' 00015100 BNL NOTFND LENGTH > 8 NOT ALLOWED 00015200 * 00015300 STH R12,LENNEW OK: SAVE NEWNAME LENGTH 00015400 MVC NEWNAME(8),BLANKS 00015500 BCTR R12,0 00015600 EX R12,MOVENEWN STORE NEWNAME FROM SYSIN CARD 00015700 * 00015800 * AT THIS POINT, THE MEMBER AND NEWNAME HAVE BEEN CHECKED AS BEING 00015900 * AT LEAST 1 CHAR LONG AND AT MOST 8 CHARS LONG: OK 00016000 * 00016100 BOTHOK LA R9,14(,R9) UPDATE OFFSET 00016200 MVC NAMEOFT(8,R9),MEMNAME 00016300 LA R10,8(,R10) UPDATE OFFSET 00016400 MVC NEWNAMEOFT(8,R10),NEWNAME 00016500 * 00016600 DONEXT BCT R4,NEXT ALL OK: READ NEXT CARD 00016700 * 00016800 NOTFND B NEXT ¬OK: SCRAP THIS CARD: READ NEXT CARD 00016900 * 00017000 EOJ1 CLOSE (SYSIN,) 00017100 * 00017200 * UPDATE COUNT OF MEMBERS TO BE FETCHED, FOR BLDL MACRO 00017300 * 00017400 S R4,=F'64' HOW MANY VALID SYSN CARDS WERE READ? 00017500 LPR R4,R4 00017600 BE FINISH 00017700 STH R4,FF -> NO OF MEMBER ENTRIES FOR BLDL 00017800 * 00017900 * PREPARE TO READ PDS DIRECTORY 00018000 * 00018100 OPEN (PDS,(INPUT)) 00018200 * 00018300 START NOP * 00018400 BLDL PDS,LISTMEM 00018500 CLOSE (PDS,) 00018600 * 00018700 * BLDL SHOULD NOW HAVE PULLED OUT THE TTR & OTHER INFO FOR EACH MEMBER. 00018800 * NOW ADD THE NEWNAMES. 00018900 * 00019000 * PREPARE TO ADD NEWNAMES TO PDS (PDSUPDAT) DIRECTORY 00019100 * 00019200 OPEN (PDSUPDAT,(OUTPUT),REPORTS,(OUTPUT)) 00019300 LA R5,1 USE R5 AS COUNTER 00019400 LA R6,1 USE R6 AS INCREMENT TO R7 00019500 LR R7,R4 USE R7 AS BXLE UPPER LIMIT 00019600 LR R9,R11 FOR INDEXING MEMBER NAMES + BASE 00019700 LA R9,0(,R9) CLEAR TOP 8 BITS 00019800 S R9,=F'14' 00019900 LR R10,R11 FOR INDEXING NEWNAMES + BASE 00020000 LA R10,0(,R10) CLEAR TOP 8 BITS 00020100 S R10,=F'8' 00020200 * 00020300 * ADD NEWNAME ENTRIES FROM ACCEPTED SYSIN CARDS 00020400 * 00020500 ADDNEWNAME NOP * DO UNTIL ALL NEWNAMES ARE ADDED 00020600 LA R9,14(,R9) UPDATE INDEX 00020700 LA R10,8(,R10) UPDATE INDEX 00020800 CLI TTROFT+2(R9),X'00' WAS THE MEMBER FOUND? 00020900 BE SKIP NO: SKIP TO PROCESS NEXT NEWNAME 00021000 MVC MEMNAMOK(8),NAMEOFT(R9) YES: SET UP REPORT LINE 00021100 MVC MEMNAME(8),NAMEOFT(R9) + SET UP FIELDS FOR STOW 00021200 MVC NEWNAMOK(8),NEWNAMEOFT(R10) DITTO 00021300 MVC NEWNAME(8),NEWNAMEOFT(R10) + SET UP FIELDS FOR STOW 00021400 MVC NAMEOFT(8,R9),NEWNAMEOFT(R10) SET UP FOR STOW MACRO 00021500 STOW PDSUPDAT,MEMNAME,C 00021600 LTR R15,R15 MEMBER RENAMED OK? 00021700 BNE SKIP NO: SKIP TO PROCESS NEXT NEWNAME 00021800 WRITEREC YES: OUTPUT LINE OF REPORT 00021900 * 00022000 SKIP BXLE R5,R6,ADDNEWNAME PROCESS NEXT NEWNAME 00022100 * 00022200 EOJ CLOSE (PDSUPDAT,,REPORTS) 00022300 * 00022400 FINISH L R13,SAVEBLK+8 RESTORE R13 FROM SAVE ADDRESS AREA 00022500 LM R14,R12,12(R13) RESTORE REGISTERS 00022600 XR R15,R15 CLEAR RETURN CODE 00022700 BR R14 RETURN CONTROL TO OPERATING SYSTEM 00022800 * 00022900 ********************************************************************** 00023000 ******** END OF PROGRAM CODE PROPER ********************************** 00023100 ********************************************************************** 00023200 * 00023300 ********************************************************************** 00023400 ******** FILES ******************************************************* 00023500 ********************************************************************** 00023600 * 00023700 * DEFINE PDS (BPAM) 00023800 * N.B. SEE 'DATA ADMINISTRATION : MACRO REF' FOR DETAILS 00023900 * 00024000 SYSIN DCB BLKSIZE=80, *00024100 DDNAME=SYSIN, *00024200 DSORG=PS, *00024300 EODAD=EOJ1, ADDRESS FOR BRANCHING, AT EOF *00024400 RECFM=FB, *00024500 MACRF=(GL) USING 'GET' AND 'LOCATE' MODE 00024600 * 00024700 REPORTS DCB BLKSIZE=80, *00024800 DDNAME=REPORTS, *00024900 DSORG=PS, *00025000 MACRF=(PM) USING 'PUT' AND 'MOVE TRANSMITTAL' 00025100 * 00025200 PDS DCB BLKSIZE=256, *00025300 DDNAME=PDS, *00025400 DSORG=PO, *00025500 EODAD=EOJ, ADDRESS FOR BRANCHING, AT EOF *00025600 RECFM=VB, DIRECTORY ENTRIES ARE VARIABLE *00025700 MACRF=(R) READ 00025800 * 00025900 PDSUPDAT DCB DDNAME=PDS, *00026000 DSORG=PO, *00026100 EODAD=EOJ, ADDRESS FOR BRANCHING, AT EOF *00026200 MACRF=(R,W) READ + WRITE 00026300 * 00026400 ********************************************************************** 00026500 ******** DEFINE STORAGE ********************************************** 00026600 ********************************************************************** 00026700 * 00026800 * INPUT RECORDS 00026900 * 00027000 INPUT DS CL80 00027100 * 00027200 LISTMEM DS 0D 00027300 FF DC H'64' UP TO 64 SYSIN CARDS MAX 00027400 LL DC H'14' 14 BYTES PER FOLLOWING ENTRY 00027500 NAME DS CL8 00027600 TTR DS CL3 00027700 K DS CL1 00027800 Z DS CL1 00027900 C DS CL1 00028000 DS CL882 00028100 N_NAME DS CL8 00028200 DS CL504 00028300 OUTPUT DS 0C 00028400 DC CL5' ' 00028500 NEWMSG DC C'NEWNAME=' 00028600 NEWNAMOK DS CL8 00028700 DC C' : ' 00028800 REPMSG DC C'SUCCESSFULLY PROCESSED FOR MEMBER = ' 00028900 MEMNAMOK DS CL8 00029000 DC CL(80+OUTPUT-*)' ' 00029100 LENMEM DS H 00029200 STRTMEM DS F 00029300 ENDMEM DS F 00029400 LENNEW DS H 00029500 STRTNEW DS F 00029600 ENDNEW DS F 00029700 MEMNAME DS CL8 00029800 NEWNAME DS CL8 00029900 * 00030000 ********************************************************************** 00030100 ******** DEFINE CONSTANTS FOR THIS PROGRAM *************************** 00030200 ********************************************************************** 00030300 * 00030400 LTORG 00030500 * 00030600 BLANKS DC CL8' ' 00030700 * 00030800 ********************************************************************** 00030900 ******** 'EXECUTE' INSTRUCTIONS ************************************** 00031000 ********************************************************************** 00031100 * 00031200 MOVEMEM MVC MEMNAME(0),INPUTOFT(R8) 00031300 MOVENEWN MVC NEWNAME(0),INPUTOFT(R8) 00031400 * 00031500 ********************************************************************** 00031600 ******** DEFINE SAVE AREA FOR THIS PROGRAM *************************** 00031700 ********************************************************************** 00031800 * 00031900 SAVEBLK DC 18F'0' 18 FULLWORDS INITIALISED TO 0 00032000 * 00032100 ********************************************************************** 00032200 ******** THAT'S IT *************************************************** 00032300 ********************************************************************** 00032400 * 00032500 END PDSRENMB SPECIFY ENTRY POINT 00033000


CP (retired sysprog)


Walt Farrell wrote:

On Tue, 14 Jun 2016 23:18:37 -0500, Paul Gilmartin <paulgboul...@aim.com> wrote:

On Wed, 15 Jun 2016 04:14:04 +0100, CM Poncelet wrote:
I would suggest writing some assembler code that invokes the BLDL macro
to read the PDS directory, ...

Does that work?

No, it doesn't. BLDL requires that you already know the member name.


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to