Data Set Naming Enforcement (DSNCHK)

How to:

To manage disk space effectively, many installations enforce strict data set naming conventions. Since FOCUS refers to data sources by ddname, the data set names (dsnames) are not significant for processing. However, as an optional feature to support your installation's standards, FOCUS can call special installation-coded verification routines to determine whether the names are acceptable. This optional facility can be used with the following data sources: FOCUS MASTER Files, FOCEXEC files, ERROR files, and FOCUS data sources. If you install this optional feature, FOCUS calls your data set name verification routine (it must be named DSNCHK) whenever any of these is opened.


Top of page

x
Syntax: How to Call DSNCHK

The argument in the call has the following syntax:

CALL SUBROUTINE DSNCHK(ddname,dsname,RETCOD)

where:

ddname

Is an 8-byte, left-justified file name with trailing blanks.

dsname

Is a 44-byte data set name field, which is also left justified with trailing blanks.

RETCOD

Is a fullword binary integer set by DSNCHK. A return code of 0 means the name is acceptable; a non-zero code means the name is unacceptable. If the return code is not zero, FOCUS issues the following diagnostic message:

(FOC333) INVALID DATASET NAME: dsname

where:

dsname

Is the actual data set name. FOCUS then proceeds as if the file was not allocated, which may generate further error messages.

The dsname argument field is actually the start of a 176-byte area that is returned by the RDJFCB macro. Refer to IBM publications for further file information returned by the macro.

Subroutine DSNCHK is link-edited to FOCUS. Normally, FOCUS is delivered with a link-edited dummy DSNCHK that accepts all data set names.

Note that z/OS-compatible versions of all user exits are required since the user exit code resides within the FOCUS load module.


Top of page

x
Procedure: How to Install DSNCHK
  1. Create member DSNCHK of FOCCTL.DATA.
  2. Assemble it.
  3. Link edit the new DSNCHK into FOCUS:
    //LINK1 EXEC  PGM=IEWL,PARM='LET,NCAL,LIST,SIZE=1024K'
    //SYSPRINT DD SYSOUT=*
    //SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(10,1))
    //OLDMOD   DD DSN=prefix.FOCLIB.LOAD,DISP=SHR
    //DSNCHK   DD DSN=assembled.dsnchk,DISP=SHR
    //MAINTAIN DD DSN=prefix.FOCCTL.DATA,DISP=SHR
    //SYSLMOD  DD DSN=prefix.TEST.FOCLIB.LOAD,DISP=SHR
    //SYSLIN   DD *
     INCLUDE DSNCHK
     INCLUDE OLDMOD(CORFOC)       <---- MODULE TO BE CHANGED
     INCLUDE MAINTAIN(CORFOC)     <---- LINK1 CNTL STATEMENTS
     NAME FOCUS(R)                <---- NEW MODULE
    /*

Information Builders