MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

BPXWDYN for retrieving INFO about a Dataset

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Application Programming
View previous topic :: View next topic  
Author Message
misi01
Advanced


Joined: 02 Dec 2002
Posts: 616
Topics: 171
Location: Stockholm, Sweden

PostPosted: Tue Sep 22, 2015 12:46 am    Post subject: BPXWDYN for retrieving INFO about a Dataset Reply with quote

We already use this program in various COBOL programs to allocate and free datasets dynamically.

Reading the manuals here https://www-01.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxb600/bpx1rx81.htm I get the impression that a COBOL program can use BPXWDYN to get the dataset name allocated to a DD-name.

Does anyone have an example of the calling parms needed ? (The manual is a bit confusing since it talks a lot about accessing the program from Rexx, but not Cobol). The following is what I've tried
Code:

               10  kk-info.                                         
                   15 filler  pic x(18) value  'INFO DD(INAV0200) '.
                   15 filler  pic x(20) value                           
                                       Z'INRTDSN(AA-INRTDSN)'.       
....
           05  aa-inrtdsn              pic x(44). 
....
       call kk-bpxwdyn        using kk-info         
                          returning aa-bpxwdyn-code 

I'm getting a return code of zero from the call, but nothing is filled in in AA-INRTDSN.

Does anyone have an idea of how to achieve this ?
_________________
Michael
Back to top
View user's profile Send private message Send e-mail
William Collins
Supermod


Joined: 03 Jun 2012
Posts: 437
Topics: 0

PostPosted: Tue Sep 22, 2015 5:24 am    Post subject: Reply with quote

That's a dynamic CALL, and 05 aa-inrtdsn pic x(44). is only known to anything, the compiler, at compile time.

So that's not going to work. It won't work with a static CALL either, since the COBOL compiler is entirely unaware of what any CALLed program does, and takes no differentiating action on them at all.
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12358
Topics: 75
Location: San Jose

PostPosted: Tue Sep 22, 2015 10:14 am    Post subject: Re: BPXWDYN Reply with quote

misi01 wrote:
I get the impression that a COBOL program can use BPXWDYN to get the dataset name allocated to a DD-name.


misi01,

Unless BPXWDYN is enhanced that I am not aware of, it cannot retrieve the DSN name and return it to the user.

You are more than welcome to open a RFE(Request for Enhancement) here

https://www.ibm.com/developerworks/rfe/
_________________
Kolusu - DFSORT Development Team (IBM)
DFSORT is on the Web at:
www.ibm.com/storage/dfsort

www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
allmonr
Beginner


Joined: 22 Jun 2017
Posts: 2
Topics: 0

PostPosted: Tue Jun 27, 2017 11:16 am    Post subject: Reply with quote

This BPXWDYN program in fact does support function INFO and does return data when called from REXX. We are trying to get this to work in Enterprise COBOL. Does anyone know how to code the parameter area in COBOL to make this utility work for COBOL ?
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12358
Topics: 75
Location: San Jose

PostPosted: Tue Jun 27, 2017 11:27 am    Post subject: Reply with quote

allmonr,

what kind of info are you trying to fetch from BPXWDYN. Can you post your REXX code?
_________________
Kolusu - DFSORT Development Team (IBM)
DFSORT is on the Web at:
www.ibm.com/storage/dfsort

www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
allmonr
Beginner


Joined: 22 Jun 2017
Posts: 2
Topics: 0

PostPosted: Tue Jun 27, 2017 11:42 am    Post subject: Reply with quote

Sure. But I need to do this in COBOL.
Code:

/* REXX ------------------------------------------------------------- */
/* BPXWDYN - Obtain DSN of allocated DD                               */
/* ------------------------------------------------------------------ */
TRACE o                                                                 
call bpxwdyn "info dd(ispplib) inrtdsn(dsnvar)"                         
SAY 'ISPPLIB is allocted to -' dsnvar
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12358
Topics: 75
Location: San Jose

PostPosted: Tue Jun 27, 2017 5:11 pm    Post subject: Reply with quote

allmonr,

You need to zero out R0 for the INFO call to work with BPXWDYN and COBOL does not have the mechanism of zeroing out the registers. In REXX R0 points to the REXX environment. You need an Assembler stub to zero out the R0 before you invoke the BPXWDYN within COBOL.
_________________
Kolusu - DFSORT Development Team (IBM)
DFSORT is on the Web at:
www.ibm.com/storage/dfsort

www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12358
Topics: 75
Location: San Jose

PostPosted: Fri Jun 29, 2018 1:19 pm    Post subject: Reply with quote

misi01,

It seems that BPXWDYN is enhanced to provide an alternate entry point, BPXWDY2, that:
(1) Preserves the invoker program mask, and
(2) Better facilitates invocation by a high-level language call by clearing register 0 as required by the BPXWDYN interface.

https://www-01.ibm.com/support/docview.wss?rs=63&uid=isg1OA51807

So here is a COBOL program that will get the INFO for an existing dataset.

Code:

//STEP0100 EXEC PGM=IGYCRCTL
//SYSPRINT DD SYSOUT=*
//SYSTERM  DD SYSOUT=*
//SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT2   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT3   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT4   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT5   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT6   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT7   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSLIN   DD DSN=&&LOADSET,
//            DISP=(MOD,PASS),
//            UNIT=SYSDA,
//            SPACE=(CYL,(1,1),RLSE)
//SYSIN    DD *
        IDENTIFICATION DIVISION.
        PROGRAM-ID.  TESTWDYN.
        ENVIRONMENT DIVISION.
        DATA DIVISION.
        WORKING-STORAGE SECTION.

        01  WS-WORK-AREA.
            05 WS-RC                   PIC  9(9) COMP-5.
            05 WS-RC-D                 PIC +(9)9.
            05 WS-DYN-PGM              PIC  X(8) VALUE 'BPXWDY2 '.

        01  WDYN-PARM.
            05 WDYN-VALUE              PIC  X(40) VALUE
               'INFO DD(MYFILE) '.
            05 WDYN-NULL               PIC  X(01) VALUE LOW-VALUES.

        01  DDNAME.
            05 DDNAME-LENGTH           PIC S9(4) BINARY VALUE 9.
            05 DDNAME-VALUE.
               10  FILLER              PIC  X(07) VALUE 'INRTDDN'.
               10  FILLER              PIC  X(03) VALUE LOW-VALUES.
            05 DDNAME-NULL             PIC  X(01) VALUE LOW-VALUES.

        01  DSNAME.
            05 DSNAME-LENGTH           PIC S9(4) BINARY VALUE 45.
            05 DSNAME-VALUE.
               10  FILLER              PIC  X(07) VALUE 'INRTDSN'.
               10  FILLER              PIC  X(44) VALUE LOW-VALUES.
            05 DSNAME-NULL             PIC  X(01) VALUE LOW-VALUES.

       PROCEDURE DIVISION.

            CALL WS-DYN-PGM USING WDYN-VALUE
                        RETURNING WS-RC.

            MOVE WS-RC TO WS-RC-D

            DISPLAY WS-DYN-PGM ' RETURNED RC = ' WS-RC-D
            DISPLAY WS-DYN-PGM ' RETURNED RCB= ' WS-RC

            CALL WS-DYN-PGM USING WDYN-VALUE
                                , DDNAME
                                , DSNAME
                        RETURNING WS-RC.

            IF WS-RC < 0
               DISPLAY 'NEGATIVE RC'
             ELSE
               DISPLAY 'POSITIVE RC'
            END-IF.

            MOVE WS-RC TO WS-RC-D
            DISPLAY WS-DYN-PGM ' RETURNED RC = ' WS-RC-D
            DISPLAY WS-DYN-PGM ' RETURNED RCB= ' WS-RC
            DISPLAY WS-DYN-PGM ' DDNAME LENG = ' DDNAME-LENGTH
                               ', DDNAME = '    DDNAME-VALUE
            DISPLAY WS-DYN-PGM ' DSNAME LENG = ' DSNAME-LENGTH
                               ', DSNAME = '    DSNAME-VALUE
            GOBACK.
/*
//STEP0200 EXEC PGM=LOADER,COND=(4,LT,STEP0100),REGION=2048K
//SYSLIB   DD DISP=SHR,DSN=CEE.SCEELKED
//SYSLOUT  DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSLIN   DD DSN=&&LOADSET,DISP=(OLD,DELETE)
//*
//MYFILE   DD DISP=SHR,DSN=Your file that needs info on

_________________
Kolusu - DFSORT Development Team (IBM)
DFSORT is on the Web at:
www.ibm.com/storage/dfsort

www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
misi01
Advanced


Joined: 02 Dec 2002
Posts: 616
Topics: 171
Location: Stockholm, Sweden

PostPosted: Sat Jun 30, 2018 1:02 am    Post subject: Reply with quote

Excellent, thanks Kolusu
_________________
Michael
Back to top
View user's profile Send private message Send e-mail
bauer
Intermediate


Joined: 10 Oct 2003
Posts: 315
Topics: 49
Location: Germany

PostPosted: Tue Jul 03, 2018 6:13 am    Post subject: Reply with quote

Dear all,

very interesting topic. Several years ago I had a similar problem (find out dataset information for datsets which are allocated by dd namens per JCL).

Here is my PL/1 solution. Perhaps it might help anybody who reads this post, or give a first impression how to retrieve information from the mvs (z/OS) system control blocks.

The first pointer for documentation is this IBM Manual: MVS Data Areas,
Volume 1 (ABEP - DAIT), GA22-7581-01 and the volumes 2,3,4,5.

Code:


                                                                               
   /* Some information in this structure is only avialable if                   
      the jcl provides the DCB parameter or the associated                     
      dataset is open                                                           
   */                                                                           
   DEFINE STRUCTURE                                                             
      1 tDSInfo                                                                 
        ,  2 DD          CHAR(8)                                               
        ,  2 DSN         CHAR(44)                                               
        ,  2 MEMBER      CHAR(8)                                               
        ,  2 DISP        CHAR(3)                                               
        ,  2 DSORG       CHAR(2)                                               
        ,  2 RECFM       CHAR(3)                                               
        ,  2 LRECL       BIN FIXED(15)                                         
        ,  2 RESERVED    CHAR(442)      /* FOR FUTURE USE */                   
        ;                                                                       
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
 DSInfo:                                                                       
    /* Loops over the MVS Control blocks to get information                     
       for all DD names associated with the current job.                       
       For each DD Name the filenames and some other                           
       data is fetched from then JFCB (Job File                                 
       Control Block).                                                         
                                                                               
       A callback function is invoked for each file.                           
       The callbackfunction is passed from the calling module.                 
       */                                                                       
                                                                               
    PROC(pEntry,pUserdata);                                                     
                                                                               
    DCL pEntry  ENTRY                                                           
          (  PTR    /* Data for each DDName / Dataset */                       
           , PTR    /* Userdata  */                                             
          ) RETURNS(BIT(1)) VARIABLE ;                                         
                                                                               
    DCL pUserData  PTR ; /* any data passed from the calling modul             
                            an routed to the callback function */               
                                                                               
    DCL 1 DSInfo TYPE tDSInfo AUTO;                                             
                                                                               
    DCL pPSA            PTR  AUTO INIT(SYSNULL());                             
    DCL 1 PSA           BASED(pPSA)  /* Prefixed Save Area */                   
          , 2 FILLER1   CHAR(540)                                               
          , 2 pTCB      PTR                                                     
          ;                                                                     
    DCL 1 TCB           BASED(pTCB)  /* Task Control Block */                   
          , 2 FILLER1   CHAR(12)                                               
          , 2 pTIOT     PTR                                                     
          ;                                                                     
                                                                               
   DCL pTIOTSEG PTR ;                                                           
   DCL 1 TIOTSEG      BASED (pTIOTSEG)   /* Task Input/Output Table */         
        ,2 TIOELNGH   BIN FIXED(7)       /* Length of this entry */             
        ,2 FILLER2    CHAR(3)                                                   
        ,2 TIOEDDNM   CHAR(8)            /* DD Name of Dateset */               
        ,2 TIOEJFCB   CHAR(3)            /* JFCB per SWAREQ MACRO */           
        ;                                                                       
                                                                               
    DCL pJFCB PTR;                                                             
    DCL 1 JFCB        BASED(pJFCB)       /* Job File Control Block */           
          ,2 JFCBDSNM CHAR(44)           /* DSN Name */                         
          ,2 JFCBELNM CHAR(8)            /* Member */                           
          ,2 FILLER1  CHAR(35)                                                 
          ,2 JFCBIND2 CHAR(1)            /* Indicator2 */                       
          ,2 FILLER2  CHAR(10)                                                 
          ,2 JFCDSRG1 CHAR(1)            /* DSORG, Byte 1*/                     
          ,2 FILLER3  CHAR(1)                                                   
          ,2 JFCRECFM CHAR(1)            /* RECFM */                           
          ,2 FILLER4  CHAR(3)                                                   
          ,2 JFCLRECL BIN FIXED(15)      /* LRECL */                           
          ;                                                                     
                                                                               
    DCL Continue BIT(1) AUTO INIT('1'B) ;                                       
                                                                               
   /* Build address of first TIOT Segement by skipping */                       
   /* bytes for jobname, stepname */                                           
   pTIOTSEG = TCB.PTIOT + 24 ;                                                 
                                                                               
   /* Loop over all TIOT Segments */                                           
   DO WHILE ((TIOTSEG.TIOELNGH > 0) & (CONTINUE));                             
                                                                               
      /* Convert SWA virtual address token to JFCB address */                   
      pJFCB = SWAREQ(TIOEJFCB) ;                                               
                                                                               
      /* extract/prepare data from controlblocks to pass                       
         to the callback function for the calling modul */                     
      CALL PLIFILL(ADDR(DSInfo),'00'X,CSTG(DSInfo));/* Fill with '0'x */       
      DSInfo.DD      = TIOTSEG.TIOEDDNM ;                                       
      DSInfo.DSN     = JFCB.JFCBDSNM    ;                                       
      DSInfo.Member  = JFCB.JFCBELNM    ;                                       
                                                                               
      SELECT (JFCB.JFCBIND2) ;                                                 
         WHEN('40'x, '41'x) DSInfo.DISP = 'OLD' ;                               
         WHEN('C0'x, 'C1'x) DSInfo.DISP = 'NEW' ;                               
         WHEN('80'x, '81'x) DSInfo.DISP = 'MOD' ;                               
         WHEN('48'x, '49'x) DSInfo.DISP = 'SHR' ;                               
         OTHER              DSInfo.DISP = ''    ;                               
      END;                                                                     
                                                                               
      SELECT (JFCB.JFCDSRG1) ;                                                 
         WHEN('80'x, '81'x) DSInfo.DSORG = 'IS' ;                               
         WHEN('40'x, '41'x) DSInfo.DSORG = 'PS' ;                               
         WHEN('20'x, '21'x) DSInfo.DSORG = 'DA' ;                               
         WHEN('02'x, '03'x) DSInfo.DSORG = 'PO' ;                               
         OTHER              DSInfo.DSORG = ''   ;                               
      END;                                                                     
                                                                               
      SELECT (JFCB.JFCRECFM) ;                                                 
         WHEN('C0'x) DSInfo.RECFM = 'U'   ;                                     
         WHEN('80'x) DSInfo.RECFM = 'F'   ;                                     
         WHEN('40'x) DSInfo.RECFM = 'V'   ;                                     
         WHEN('90'x) DSInfo.RECFM = 'FB'  ;                                     
         WHEN('50'x) DSInfo.RECFM = 'VB'  ;                                     
         WHEN('94'x) DSInfo.RECFM = 'FBA' ;                                     
         WHEN('54'x) DSInfo.RECFM = 'VBA' ;                                     
         OTHER       DSInfo.RECFM = ''    ;                                     
      END;                                                                     
      DSInfo.LRECL   = JFCB.JFCLRECL  ;                                         
                                                                               
      /* Pass data to callback function in calling module */                   
      Continue = pEntry(ADDR(DSInfo),pUserdata);                               
                                                                               
      /* Get next TIOTSEG */                                                   
      pTIOTSEG = pTIOTSEG + TIOTSEG.TIOELNGH ;                                 
                                                                               
   END ;                                                                       
                                                                               
                                                                               
 SWAREQ:                                                                       
    /* Convert SWA virtual address token to 31 Bit address */                   
    /* This submodule replaces assembler macro SWAREQ */                       
    PROC(SWA) RETURNS(PTR);                                                     
                                                                               
    DCL SWA CHAR(3) ;  /* parameter SWA Virtual address token */               
                                                                               
    DCL 1 SVAS AUTO                                                             
          ,2 SVA1  CHAR(1) INIT(LOW(1))                                         
          ,2 SVA2  CHAR(3) INIT(SWA)                                           
          ;                                                                     
    DCL SVAP PTR BASED(ADDR(SVAS)) ;                                           
    DCL SVAB BIN FIXED(31) BASED(ADDR(SVAS));                                   
                                                                               
    DCL pPSA            PTR  AUTO INIT(SYSNULL());                             
    DCL 1 PSA           BASED(pPSA)  /* Prefixed Save Area */                   
          , 2 FILLER1   CHAR(540)                                               
          , 2 pTCB      PTR                                                     
          ;                                                                     
    DCL 1 TCB           BASED(pTCB) /* Task Control Block */                   
          , 2 FILLER1   CHAR(180)                                               
          , 2 pJSCB     PTR                                                     
          ;                                                                     
    DCL 1 JSCB          BASED(pJSCB) /* Job / Step Control Block */             
          ,2 FILLER1    CHAR(244)                                               
          ,2 pJSCBQMPI  PTR                                                     
          ;                                                                     
    DCL 1 QMPA          BASED(pJSCBQMPI) /* Queue Manager                       
                                            Parameter Area */                   
          ,2 Filler     CHAR(24)                                               
          ,2 QMAT       BIN FIXED(31)                                           
          ;                                                                     
                                                                               
    DCL l_QMAT BIN FIXED(31) AUTO NOINIT;                                       
                                                                               
    IF MOD(SVAB,2) = 1 THEN DO; /* 24 or 31 Bit address */                     
       l_QMAT = QMPA.QMAT ;                                                     
       DO WHILE(SVAB > 65536) ;                                                 
          l_QMAT = l_QMAT + 12 ;                                               
          SVAB = SVAB - 65536;                                                 
       END;                                                                     
       SVAB = SVAB + 1 + 16 + l_QMAT ;                                         
    END;                                                                       
    ELSE DO;                                                                   
       SVAB = SVAB + 16 ;                                                       
    END ;                                                                       
                                                                               
    RETURN(SVAP);    /* return 31 Bit address */                               
                                                                               
    END ; /* SWAREQ procedure */                                               
                                                                               
    END ; /* DSInfo */                                                         
                                                                             
           




kind regards,
bauer
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12358
Topics: 75
Location: San Jose

PostPosted: Tue Jul 03, 2018 9:12 am    Post subject: Reply with quote

bauer,

Thanks for sharing the PL/1 code. Much appreciated.
_________________
Kolusu - DFSORT Development Team (IBM)
DFSORT is on the Web at:
www.ibm.com/storage/dfsort

www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
misi01
Advanced


Joined: 02 Dec 2002
Posts: 616
Topics: 171
Location: Stockholm, Sweden

PostPosted: Wed Oct 24, 2018 6:22 am    Post subject: Reply with quote

Thanks for the code Kolusu. It solved the following problem we had here.

We have a batch program that allocates a number of private DL/1 databases. Trouble is, there's no guarantee that the actual databases exist (privately), so to avoid a JCL error, we allocate them as DUMMY.
All well and good, until the program attempts to read them and fails with a return code AI. Now, theoretically we could simply analyze that return code and process it as if it were a GE.

Instead, I ran your code above using 2 databases, the first one existed, the second one was allocated a DUMMY. Here are the surprising (?) results.
Quote:

BPXWDY2 RETURNED RC = +0
BPXWDY2 RETURNED RCB= 0000000000
POSITIVE RC
BPXWDY2 RETURNED RC = +0
BPXWDY2 RETURNED RCB= 0000000000
BPXWDY2 DDNAME LENG = 00005, DDNAME = DAA01 N
BPXWDY2 DSNAME LENG = 00021, DSNAME = SIMMIC.DIALDBDT.DAA01
BPXWDY2 RETURNED RC = +0
BPXWDY2 RETURNED RCB= 0000000000
POSITIVE RC
BPXWDY2 RETURNED RC = +294967273
BPXWDY2 RETURNED RCB= 4294967273
BPXWDY2 DDNAME LENG = 00000, DDNAME = AA01 N
BPXWDY2 DSNAME LENG = 00000, DSNAME = IMMIC.DIALDBDT.DAA01


As you can see, the DUMMY allocated file returned an RC that I assume indicates an "invalid" file. (BTW, the DDNAME/DSNAME in the second example contain a leading blank even though it's not obvious)

Actually, the fault was mine (though not obvious). My program was looping, checking for each entry in a table as to whether the file existed or not. What I didn't realise/hadn't noticed was that the contents of DDNAME/DSNAME get truly clobbered after each call, so you have to re-init them. This became my code
Code:

 The definitions first
       01  DDNAME.                                                 
            05 DDNAME-LENGTH           PIC S9(4) BINARY VALUE 9.   
            05 DDNAME-VALUE.                                       
               10  FILLER              PIC  X(07).                 
                   88   INRTDDN            VALUE 'INRTDDN'.         
               10  FILLER              PIC  X(03) VALUE LOW-VALUES.
            05 DDNAME-NULL             PIC  X(01) VALUE LOW-VALUES.
       01  DSNAME.                                                 
            05 DSNAME-LENGTH           PIC S9(4) BINARY VALUE 45.   
            05 DSNAME-VALUE.                                       
               10  FILLER              PIC  X(07).                 
                   88 INRTDSN    value 'INRTDSN'.                   
               10  FILLER              PIC  X(44) VALUE LOW-VALUES.
            05 DSNAME-NULL             PIC  X(01) VALUE LOW-VALUES.
 The actual code
           perform varying x1 from 1 by 1                   
             until x1 > x2                                 
                                                           
             move ' '                  to w-bpxwdy2-value   
             string                                         
               'INFO DD('                 delimited by size
               t-dl1-databas(x1)          delimited by ' ' 
               ') '                                         
               low-value                  delimited by size
               into w-bpxwdy2-value                         
             end-string                                     
      *                                                     
             call k-bpxwdy2         using w-bpxwdy2-value   
                                returning w-bpxwdy2-rc     
      *                                                           
             if w-bpxwdy2-rc = 0                                   
               move low-values                         to DDNAME                           
               move 9                                      to DDNAME-LENGTH                             
               set INRTDDN                              to true                                 
               move low-values                         to DsNAME                           
               move 45                                    to DSNAME-LENGTH                           
               set INRTDSN                              to true                             
               call k-bpxwdy2       using w-bpxwdy2-value         
                                          ddname                   
                                          dsname                   
                                returning w-bpxwdy2-rc             
                                                                   
             end-if                                               
      *                                                           
             if w-bpxwdy2-rc = 0                                   
               move k-j                to v-databas(x1)           
             end-if                                               
      *                                                           
           end-perform                                             

NOW I see that DUMMY files are returned with a DSNAME of NULLFILE.
_________________
Michael
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Application Programming All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group