Go to LeighWeb Home Page            

Back To LeighWeb Mainframe Utilities Page

View the documentation associated with this module

/**********************************************************************
/* UTILITY: DDCONCAT                                                  *
/* AUTHOR: DAVID LEIGH                                                *
/* DATE: 11-26-90                                                     *
/* FUNCTION: RE-ALLOCATE THE SYSPROC AND ISPF DD'S AT TSO LOGON TO    *
/*           ADD TO THE CONCATENATION BEFORE OR AFTER THE CURRENT     *
/*           ALLOCATIONS                                              *
/**********************************************************************
PROC 0 BSYSPROC() ASYSPROC() +
       BSYSEXEC() ASYSEXEC() +
       BSYSHELP() ASYSHELP() +
       BISPPLIB() AISPPLIB() +
       BISPTLIB() AISPTLIB() +
       BISPSLIB() AISPSLIB() +
       BISPMLIB() AISPMLIB() +
       BISPLLIB() AISPLLIB() DEBUG HELP
IF &DEBUG = DEBUG THEN +
    CONTROL MSG LIST CONLIST SYMLIST NOFLUSH ASIS
ELSE +
    CONTROL NOMSG NOLIST NOFLUSH ASIS
IF &HELP = HELP THEN GOTO HELPSEC

/**********************************************************************
/* GATHER SYSTEM ALLOCATION INFORMATION FROM LISTALC STATUS           *
/**********************************************************************
SET SYSOUTTRAP = 500
LISTA ST
SET SYSOUTTRAP = 0

/**********************************************************************
/* SAVE IN OTHER VARS SINCE SOME TSO COMMANDS WIPE OUT SYSOUTLINE INFO*
/**********************************************************************
SET X = &SYSOUTLINE
DO &I = 1 TO &SYSOUTLINE
    SET LINE&I = &&SYSOUTLINE&I
END

/**********************************************************************
/* LOOP THROUGH THE VARIABLES AND PROCESS EACH DD AS IT COMES UP.     *
/**********************************************************************
SET I = &I - 1
DO &J = 1 TO &I
    SET LINE = &&LINE&J
    SET TEMPDD = &STR(&LINE)
    IF &SUBSTR(1:2,&STR(&TEMPDD)) >    THEN +
        DO
            IF &STR(&ALLDSN) >    THEN SET ALLDSN = &STR(&ALLDSN '&DSN')
                                  ELSE SET ALLDSN = &STR('&DSN')
            SET X = &SYSINDEX(&STR( ),&STR(&TEMPDD)) - 1
            IF &X < 1 THEN SET X = &LENGTH(&STR(&TEMPDD))
            IF &X > 0 THEN SET DSN = &SUBSTR(1:&X,&STR(&TEMPDD))
        END
    IF &SUBSTR(1:2,&STR(&TEMPDD)) =    AND +
       &SUBSTR(3:3,&STR(&TEMPDD)) >    THEN +
        DO
            SELECT
/**********************************************************************
/* SYSPROC REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = SYSPROC AND +
                     (&STR(&BSYSPROC) >          OR +
                      &STR(&ASYSPROC) >         )) DO
                        FREE DDNAME(SYSPROC)
                        ALLOC DD(SYSPROC) +
                              DSN(&BSYSPROC +
                                  &ALLDSN +
                                  &ASYSPROC) SHR
                        WRITE *** SYSPROC ALLOCATION CC = &LASTCC ***
                    END
/**********************************************************************
/* SYSEXEC REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = SYSEXEC AND +
                     (&STR(&BSYSEXEC) >          OR +
                      &STR(&ASYSEXEC) >         )) DO
                        FREE DDNAME(SYSEXEC)
                        ALLOC DD(SYSEXEC) +
                              DSN(&BSYSEXEC +
                                  &ALLDSN +
                                  &ASYSEXEC) SHR
                        WRITE *** SYSEXEC ALLOCATION CC = &LASTCC ***
                    END
/**********************************************************************
/* SYSHELP REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = SYSHELP AND +
                     (&STR(&BSYSHELP) >          OR +
                      &STR(&ASYSHELP) >         )) DO
                        FREE DDNAME(SYSHELP)
                        ALLOC DD(SYSHELP) +
                              DSN(&BSYSHELP +
                                  &ALLDSN +
                                  &ASYSHELP) SHR
                        WRITE *** SYSHELP ALLOCATION CC = &LASTCC ***
                    END
/**********************************************************************
/* ISPPLIB REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = ISPPLIB AND +
                     (&STR(&BISPPLIB) >          OR +
                      &STR(&AISPPLIB) >         )) DO
                        FREE DDNAME(&CURRDD)
                        ALLOC DD(&CURRDD) +
                              DSN(&BISPPLIB +
                                  &ALLDSN +
                                  &AISPPLIB) SHR
                        WRITE *** &CURRDD ALLOCATION CC = &LASTCC ***
                    END
/**********************************************************************
/* ISPTLIB REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = ISPTLIB AND +
                     (&STR(&BISPTLIB) >          OR +
                      &STR(&AISPTLIB) >         )) DO
                        FREE DDNAME(&CURRDD)
                        ALLOC DD(&CURRDD) +
                              DSN(&BISPTLIB +
                                  &ALLDSN +
                                  &AISPTLIB) SHR
                        WRITE *** &CURRDD ALLOCATION CC = &LASTCC ***
                    END
/**********************************************************************
/* ISPMLIB REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = ISPMLIB AND +
                     (&STR(&BISPMLIB) >          OR +
                      &STR(&AISPMLIB) >         )) DO
                        FREE DDNAME(&CURRDD)
                        ALLOC DD(&CURRDD) +
                              DSN(&BISPMLIB +
                                  &ALLDSN +
                                  &AISPMLIB) SHR
                        WRITE *** &CURRDD ALLOCATION CC = &LASTCC ***
                    END
/**********************************************************************
/* ISPSLIB REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = ISPSLIB AND +
                     (&STR(&BISPSLIB) >          OR +
                      &STR(&AISPSLIB) >         )) DO
                        FREE DDNAME(&CURRDD)
                        ALLOC DD(&CURRDD) +
                              DSN(&BISPSLIB +
                                  &ALLDSN +
                                  &AISPSLIB) SHR
                        WRITE *** &CURRDD ALLOCATION CC = &LASTCC ***
                    END
/**********************************************************************
/* ISPLLIB REALLOCATION                                               *
/**********************************************************************
                WHEN (&CURRDD = ISPLLIB AND +
                     (&STR(&BISPLLIB) >          OR +
                      &STR(&AISPLLIB) >         )) DO
                        FREE DDNAME(&CURRDD)
                        ALLOC DD(&CURRDD) +
                              DSN(&BISPLLIB +
                                  &ALLDSN +
                                  &AISPLLIB) SHR
                        WRITE *** &CURRDD ALLOCATION CC = &LASTCC ***
                    END
            END
            SET CURRDD = &SUBSTR(3:10,&STR(&TEMPDD)
            SET X = &SYSINDEX(&STR( ),&STR(&CURRDD)) - 1
            IF &X < 1 THEN SET X = &LENGTH(&STR(&CURRDD))
            IF &STR(&CURRDD) >    THEN +
                DO
                    SET CURRDD = &SUBSTR(1:&X,&STR(&CURRDD))
                    SET ALLDSN =
                END
        END
END

EXIT

HELPSEC: +
SET PLUS = &STR(+ )
CLRSCRN
WRITE *** HELP FOR "DDCONCAT" UTILITY ***
WRITE
WRITE DDCONCAT is a CLIST which allows the user to dynamically change the
WRITE concatenation sequence of any of the following DDs during logon or while
WRITE out of ISPF.
WRITE
WRITE SYSHELP
WRITE SYSEXEC
WRITE SYSPROC
WRITE ISPPLIB
WRITE ISPMLIB
WRITE ISPSLIB
WRITE ISPTLIB
WRITE ISPLLIB
WRITE
WRITE It allows you to put one or more libraries before and/or after
WRITE each one of these standard dd's.
WRITE
WRITE Note: you are responsible for whether any specific library can, in
WRITE fact, be successfully concatenated to a given dd based on MVS
WRITE restrictions on dataset concatenations and installation-specific
WRITE restrictions.  For example, Fidelity CLIST files are all defined
WRITE VB 255.  An FB 80 library ahead of this concatenation will cause
WRITE any CLISTs executed in concatenation after the FB 80 library to
WRITE ABEND.  Also, some installation-specific ISPF commands can only be
WRITE implemented by placing them in the first ISPTLIB library.  If you
WRITE place a different ISPTLIB library first, you may, in fact, nullify
WRITE your ability to use these commands.
WRITE
WRITE DDCONCAT has 2 keyword parameters for each ISPF ddname and for
WRITE SYSPROC.  The names of these keywords are the ddname prefixed by
WRITE an "A" or a "B".  For example, the CLIST dd "SYSPROC" has the
WRITE keywords "ASYSPROC" and "BSYSPROC" associated with it; the panel
WRITE dd "ISPPLIB" has "AISPPLIB" and "BISPPLIB", etc.  The "A" means
WRITE "after" and the "B" means "before".
WRITE
WRITE Consequently, you put the library names which you want to place
WRITE before the current xxxxxxx concatenation in the Bxxxxxxx keyword.
WRITE To place CLIST library "ABC.DEF.CLIST" ahead of the concatenation
WRITE in SYSPROC, you would invoke DDCONCAT as follows:
WRITE
WRITE %DDCONCAT BSYSPROC('''ABC.DEF.CLIST''')
WRITE
WRITE You may specify any or all of the keywords which DDCONCAT has in a
WRITE single call to DDCONCAT (indeed, you SHOULD do this for
WRITE efficiency's sake).
WRITE
WRITE DDCONCAT uses standard TSO dataset name qualification.  This means
WRITE that if you specify a dataset name in single quotes, it will be
WRITE used as specified.  If you do not specify the single quotes, your
WRITE user id will be prefixed in front of the dataset name.  In the
WRITE above example, if you had specified BSYSPROC(ABC.DEF.CLIST), the
WRITE actual dataset to be used would have been &SYSUID..ABC.DEF.CLIST.
WRITE If you want to specify more than one dataset in a given keyword
WRITE parameter, the entire keyword value must be in single quotes as
WRITE well.
WRITE
WRITE Note that the use of single quotes in CLIST processing of a
WRITE KEYWORD parameter (such as BSYSPROC, or AISPPLIB in this example)
WRITE is not intuitively obvious.  CLISTs interpret single quotes a
WRITE little strangely when passed as part of parameters.  In the above
WRITE example, to maintain the single quotes around ABC.DEF.CLIST, three
WRITE single quotes on each side were needed.  The outer-most single
WRITE quote encompasses the entire parameter, and the next two are then
WRITE interpreted as one single quote.  Note how they are used in the
WRITE next example.
WRITE
WRITE For instance, if you wanted to place &SYSUID..GHI.JKL.ISPPLIB and
WRITE MNO.PQR.ISPPLIB after the ISPPLIB concatenation, you would specify
WRITE the command as follows:
WRITE
WRITE %DDCONCAT AISPPLIB('GHI.JKL.ISPPLIB ''MNO.PQR.ISPPLIB''')
WRITE
WRITE So, if you wanted to place all of your personal CLIST and ISPF
WRITE libraries in the proper concatenations while logging on, you could
WRITE call DDCONCAT in the following manner:
WRITE
WRITE %DDCONCAT BSYSPROC(PDS.CLIST) BISPPLIB(PDS.ISPPLIB) &STR(&PLUS)
WRITE           BISPTLIB(PDS.ISPTLIB) BISPMLIB(PDS.ISPMLIB) &STR(&PLUS)
WRITE           BISPSLIB(PDS.ISPSLIB) BISPLLIB(PDS.ISPLLIB)
WRITE
WRITE *** END OF HELP *** NO PROCESSING PERFORMED ***
EXIT