Took me a while to find it, but I *think* this is my re-implementation for TIOT access in Rexx when SWA=ABOVE (I know I copied this technique from another author whose name I did not save, so my apologies to that author - if you are still reading this list, please take credit where it is due).
Notes about errors or omissions in the below logic are welcomed. The date on the source member where I found these routines was 2006, so things may be different now. I haven't had a need to use this code since 2006, and I can't test it again right at this moment. If I can find any round tuits I can try to convert the logic to valid Enterprise COBOL and test it. If someone else has the time now, please be my guest and let us know your results. Peter --------------------------- alldsn: procedure parse upper arg ddname nextdsn = getdsn(ddname) dsnlist = '' do xi = 1 by 1 while nextdsn /= (ddname 'NOT FOUND') dsnlist = dsnlist nextdsn nextdsn = getdsn(ddname'+'xi) end if xi = 1 then , dsnlist = nextdsn return dsnlist getdsn: procedure parse upper arg ddname parse var ddname ddname '+' concat if concat = '' then concat = 0 tcb_address = storage(21C,4) tiot_address = storage(d2x(c2d(tcb_address)+12),4) dd_address = d2x(c2d(tiot_address)+28) dd_length = storage(d2x(c2d(tiot_address)+24),1) tiot_address = d2x(c2d(tiot_address)+24) jfcb_address = storage(d2x(x2d(tiot_address)+12),3) do while dd_length /= '00'x if storage(dd_address,8) = ddname then leave tiot_address = d2x(x2d(tiot_address)+c2d(dd_length)) dd_length = storage(tiot_address,1) dd_address = d2x(x2d(tiot_address)+4) jfcb_address = storage(d2x(x2d(tiot_address)+12),3) end if dd_length = '00'x then return ddname 'NOT FOUND' do concat tiot_address = d2x(x2d(tiot_address)+c2d(dd_length)) dd_length = storage(tiot_address,1) dd_address = d2x(x2d(tiot_address)+4) jfcb_address = storage(d2x(x2d(tiot_address)+12),3) if dd_length = '00'x then return ddname 'NOT FOUND' if storage(dd_address,8) /== ' ' then , return ddname 'NOT FOUND' end return strip(storage(d2x(c2d(jfcb_address)+16),44),'T') ------------------------- -----Original Message----- From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of Farley, Peter Sent: Friday, May 5, 2023 5:58 PM To: IBM-MAIN@LISTSERV.UA.EDU Subject: Re: COBOL to dynamic DD name EXTERNAL EMAIL That logic is fine for SWA below the line, but I don't think many shops still run that way, at least not the larger ones. ISTR there was at one time a published Rexx implementation of the SWA-above logic, but I can't put my finger on it just yet. That logic (if found) should be transferable to Enterprise COBOL. Peter -----Original Message----- From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of rpinion865 Sent: Friday, May 5, 2023 2:00 PM To: IBM-MAIN@LISTSERV.UA.EDU Subject: COBOL to dynamic DD name I don't know if this program is of any use to the original poster. But, I came across the source this afternoon. It would seem if you can read the JFCB, maybe you could update it? IDENTIFICATION DIVISION. PROGRAM-ID. COBJFCB. INSTALLATION. AUTHOR. KEVIN. DATE-WRITTEN. 11/07/2005. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 TCB-ADDRESS-POINTER. 05 TCB-ADDR-POINTER USAGE IS POINTER. 01 TIOT-SEG-POINT. 05 TIOT-SEG-POINTER USAGE IS POINTER. 05 TIOT-SEG-PNT REDEFINES TIOT-SEG-POINTER PIC S9(9) COMP. 01 JFCB-POINT. 05 JFCB-POINTER USAGE IS POINTER. 05 JFCB-POINT-RED REDEFINES JFCB-POINTER. 10 FILLER PIC X. 10 JFCB-LOW-3 PIC X(3). LINKAGE SECTION. 01 DDNAME-DSN-ARRAY. 05 DDNAME-DSN OCCURS 100 TIMES INDEXED BY NDX1. 10 DDA-DDNAME PIC X(8). 10 DDA-DSN PIC X(44). 01 TCB-POINTER USAGE IS POINTER. 01 TCB. 05 FILLER PIC X(12). 05 TIOT-POINTER USAGE IS POINTER. 01 TIOT-START PIC X(24). 01 TIOT-SEG. 05 TIO-LEN PIC X. 05 FILLER PIC X(3). 05 DD-NAME PIC X(8). 05 JFCB-ADDR PIC X(3). 01 JFCB. 05 FILLER PIC X(16). 05 DS-NAME PIC X(44). PROCEDURE DIVISION USING DDNAME-DSN-ARRAY. MOVE LOW-VALUES TO JFCB-POINT. MOVE X'0000021C' TO TCB-ADDRESS-POINTER. SET ADDRESS OF TCB-POINTER TO TCB-ADDR-POINTER. SET ADDRESS OF TCB TO TCB-POINTER. SET ADDRESS OF TIOT-START TO TIOT-POINTER. SET TIOT-SEG-POINTER TO TIOT-POINTER. ADD 24 TO TIOT-SEG-PNT. SET ADDRESS OF TIOT-SEG TO TIOT-SEG-POINTER. SET NDX1 TO 1. PERFORM UNTIL TIO-LEN = LOW-VALUES OR NDX1 > 100 MOVE DD-NAME TO DDA-DDNAME(NDX1) MOVE JFCB-ADDR TO JFCB-LOW-3 SET ADDRESS OF JFCB TO JFCB-POINTER MOVE DS-NAME TO DDA-DSN(NDX1) DISPLAY DDA-DDNAME(NDX1) DDA-DSN(NDX1) ADD 20 TO TIOT-SEG-PNT SET ADDRESS OF TIOT-SEG TO TIOT-SEG-POINTER SET NDX1 UP BY 1 END-PERFORM. GOBACK. -- 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. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN 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. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN