Go to LeighWeb Home Page            

Back To LeighWeb Mainframe Utilities Page

View the documentation associated with this module

/**********************************************************************
/* UTILITY: SCRATCH                                                   *
/* AUTHOR: DAVID LEIGH                                                *
/* FUNCTION: CREATE A BATCH JOB FOR SCRATCHING TAPE DATASETS EN MASSE.*
/**********************************************************************
PROC 0 HELP DSNQUAL() UTILITY(SCRATCH)
/*** CHECK THE DEBUG SWITCH ***/
ISPEXEC VGET DBGSWTCH PROFILE
IF &DBGSWTCH = ON THEN +
    CONTROL MSG LIST CONLIST SYMLIST NOFLUSH NOPROMPT ASIS
ELSE +
    CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS

/**********************************************************************
/* TELL THE USER WHAT'S HAPPENING                                     *
/**********************************************************************
SET ZEDLMSG = &STR(*** INITIALIZATION ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)

/**********************************************************************
/* CREATE THE TABLE                                                   *
/**********************************************************************
ISPEXEC TBCREATE TEMPTABL NOWRITE REPLACE KEYS() NAMES(DATASET)

/**********************************************************************
/* GET USER INFORMATION                                               *
/**********************************************************************
CALL 'SYS2.USC1.LINKLIB(USERINFO)' '&SYSUID '
ISPEXEC VGET (BINNM,CCNTR) PROFILE
SET SYSOUTTRAP = 1000
ACF
LIST *
END
SET SYSOUTTRAP = 0
SET SYSDVAL = &SYSOUTLINE1
READDVAL A B NAME1 NAME2 NAME3 NAME4 NAME5
SET NAME = &STR(&NAME1)
IF &STR(&NAME2) >    THEN SET NAME = &STR(&NAME &NAME2)
IF &STR(&NAME3) >    THEN SET NAME = &STR(&NAME &NAME3)
IF &STR(&NAME4) >    THEN SET NAME = &STR(&NAME &NAME4)
IF &STR(&NAME5) >    THEN SET NAME = &STR(&NAME &NAME5)
SET LNAME = &LENGTH(&STR(&NAME))

/**********************************************************************
/* GET DATE INFORMATION                                               *
/**********************************************************************
SET DUFUNC   = CONVERT
SET DUNUMBER =
SET DUDATE1  = &STR(&SYSSDATE)
SET DUDY1FMT = DD
SET DUMO1FMT = MM
SET DUYR1FMT = YY
SET DUDT1FMT = &STR(Y/M/D)
SET DUDY2FMT = ZD
SET DUMO2FMT = MONTH
SET DUYR2FMT = YYYY
SET DUDT2FMT = &STR(M D, Y)

ISPEXEC VPUT (DUFUNC DUDATE1 DUDY1FMT DUMO1FMT DUYR1FMT DUDT1FMT +
              DUNUMBER DUDY2FMT DUMO2FMT DUYR2FMT DUDT2FMT) SHARED

ISPEXEC SELECT PGM(DATEUTIL) PARM(ISPF)
SET PGMCC = &LASTCC

IF &PGMCC = 0 THEN ISPEXEC VGET DUDATE2 SHARED
ELSE SET DUDATE2 = &STR(&SYSSDATE)

/**********************************************************************
/* WHICH "DSNQUAL" ARE WE GOING TO USE                                *
/**********************************************************************
IF &STR(&DSNQUAL) =     THEN SET DSNQUAL = &SYSUID

/**********************************************************************
/* SET SOME VARIABLES                                                 *
/**********************************************************************
SET LINE1 = &STR( +------------------------------------)+
            &STR(-----------------------------------------+)
SET LINE2 = &STR( ¦                                    )+
            &STR(                                         ¦)
SET LINE3 = &STR( ¦                       T M S    U P )+
            &STR(D A T E    F O R M                       ¦)
SET LINE4 = &STR( ¦                                    )+
            &STR(                                         ¦)
SET LINE5 = &STR( ¦------------------------------------)+
            &STR(-----------------------------------------¦)
SET LINE6 = &STR( ¦VOLSER¦DATA SET NAME / NEW DATA  )+
            &STR(SET NAME      ¦SCRATCH¦ NEW EXPIRATION DATE ¦)
SET LASTLINE = &STR( +------------------------------------)+
               &STR(-----------------------------------------+)
SET SEPARATE = &STR( ¦------+--------------------------)+
               &STR(--------------+-------+---------------------¦)
SET SUFFIX = &STR(¦  YES  ¦                     ¦)
IF &LNAME > 45 THEN SET X = &LNAME + 13
ELSE SET X = 61
SET AST =
SET SPC =
DO &I = 1 TO &X
    SET AST = &STR(&AST*)
    SET SPC = &STR(&SPC )
END
SET SPC = &STR(*)&SUBSTR(2:&X-1,&STR(&SPC))&STR(*)
SET X = &EVAL((80-&X)/2)
SET PFX =
DO &I = 1 TO &X
    SET PFX = &STR(&PFX )
END
SET HEAD1 =  &STR(1)
SET HEAD2 =  &STR(&PFX&AST)
SET HEAD3 =  &STR(&PFX&SPC)
SET HEAD4 =  &STR(&PFX* TO:      COMPUTER ROOM BUILDING "D")
SET L = &EVAL(&LENGTH(&STR(&HEAD2))-&LENGTH(&STR(&HEAD4)))
SET SFX =
DO &I = 1 TO &L-1
    SET SFX = &STR(&SFX )
END
SET HEAD4 = &STR(&HEAD4&SFX*)
SET HEAD5 =  &STR(&PFX&SPC)
SET HEAD6 =  &STR(&PFX* FROM:    &NAME)
SET L = &EVAL(&LENGTH(&STR(&HEAD2))-&LENGTH(&STR(&HEAD6)))
SET SFX =
DO &I = 1 TO &L-1
    SET SFX = &STR(&SFX )
END
SET HEAD6 = &STR(&HEAD6&SFX*)
SET HEAD7 =  &STR(&PFX&SPC)
SET HEAD8 =  &STR(&PFX* DATE:    &DUDATE2)
SET L = &EVAL(&LENGTH(&STR(&HEAD2))-&LENGTH(&STR(&HEAD8)))
SET SFX =
DO &I = 1 TO &L-1
    SET SFX = &STR(&SFX )
END
SET HEAD8 = &STR(&HEAD8&SFX*)
SET HEAD9 =  &STR(&PFX&SPC)
SET HEAD10 = &STR(&PFX* SUBJECT: PLEASE SCRATCH THE ATTACHED +
                                 LIST OF TAPES IN TMS)
SET L = &EVAL(&LENGTH(&STR(&HEAD2))-&LENGTH(&STR(&HEAD10)))
SET SFX =
DO &I = 1 TO &L-1
    SET SFX = &STR(&SFX )
END
SET HEAD10 = &STR(&HEAD10&SFX*)
SET HEAD11 = &STR(&PFX&SPC)
SET HEAD12 = &STR(&PFX&AST)
SET HEAD13 = &STR(1)

/**********************************************************************
/* TELL THE USER WHAT'S HAPPENING                                     *
/**********************************************************************
SET ZEDLMSG = &STR(*** FINDING ANY "&DSNQUAL" TAPE DATASETS ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)

/**********************************************************************
/* GET THE SYSUID DATASET NAMES                                       *
/**********************************************************************
CONTROL MSG
SET SYSOUTTRAP = 10000
LISTCAT VOLUME LEVEL(&DSNQUAL)
SET SYSOUTTRAP = 0
SET A = &SYSOUTLINE
CONTROL NOMSG

/**********************************************************************
/* LOAD THE TABLE WITH THESE                                          *
/**********************************************************************
DO &B = 1 TO &A
    SET SYSDVAL = &STR(&SYSNSUB(2,&&SYSOUTLINE&B))
    READDVAL PARMA PARMB PARMC PARMD
    SELECT
        WHEN (&STR(&PARMA)=&STR(NONVSAM)) SET DATASET = &STR(&PARMC)
        WHEN (&SYSINDEX(&STR(VOLSER-),&STR(&PARMA))>0) DO
            SET VOLUME = &SUBSTR(&LENGTH(&STR(&PARMA))-5:+
                                 &LENGTH(&STR(&PARMA)),+
                                 &STR(&PARMA))
            IF &DATATYPE(&VOLUME) = CHAR THEN SET VOLUME =
        END
        OTHERWISE SET VOLUME =
    END
    IF &STR(&VOLUME) >      THEN +
        DO
            SET DATASET = &STR( &DATASET)+
                          &STR(          )+
                          &STR(          )+
                          &STR(          )+
                          &STR(          )
            SET DATASET = &STR( ¦&VOLUME¦)+
                          &SUBSTR(1:40,+
                          &STR(&DATASET))+
                          &STR(&SUFFIX)
            ISPEXEC TBADD TEMPTABL
            SET VOLUME =
        END
END

/**********************************************************************
/* TELL THE USER WHAT'S HAPPENING                                     *
/**********************************************************************
SET ZEDLMSG = &STR(*** FINDING ANY "T.&DSNQUAL" TAPE DATASETS ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)

/**********************************************************************
/* GET THE T.SYSUID DATASET NAMES                                     *
/**********************************************************************
CONTROL MSG
SET SYSOUTTRAP = 10000
LISTCAT VOLUME LEVEL(T.&DSNQUAL)
SET SYSOUTTRAP = 0
SET A = &SYSOUTLINE
CONTROL NOMSG

/**********************************************************************
/* LOAD THE TABLE WITH THESE                                          *
/**********************************************************************
/*IF &SYSUID = D@UDAL THEN CONTROL MSG LIST CONLIST SYMLIST
DO &B = 1 TO &A
    SET SYSDVAL = &STR(&SYSNSUB(2,&&SYSOUTLINE&B))
    READDVAL PARMA PARMB PARMC PARMD
    SELECT
        WHEN (&STR(&PARMA)=&STR(NONVSAM)) SET DSN = &STR(&PARMC)
        WHEN (&SYSINDEX(&STR(VOLSER-),&STR(&PARMA))>0) DO
            SET VOLUME = &SUBSTR(&LENGTH(&STR(&PARMA))-5:+
                                 &LENGTH(&STR(&PARMA)),+
                                 &STR(&PARMA))
            IF &DATATYPE(&VOLUME) = CHAR THEN SET VOLUME =
        END
        OTHERWISE SET VOLUME =
    END
    IF &STR(&VOLUME) >      THEN +
        DO
            SET DATASET = &STR( &DSN)+
                          &STR(          )+
                          &STR(          )+
                          &STR(          )+
                          &STR(          )
            SET DATASET = &STR( ¦&VOLUME¦)+
                          &SUBSTR(1:40,+
                          &STR(&DATASET))+
                          &STR(&SUFFIX)
            ISPEXEC TBADD TEMPTABL
            SET VOLUME =
        END
END

/**********************************************************************
/* TELL THE USER WHAT'S HAPPENING                                     *
/**********************************************************************
SET ZEDLMSG = &STR(*** FINDING ANY "T.OFF.&DSNQUAL" TAPE DATASETS ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)

/**********************************************************************
/* GET THE T.SYSUID DATASET NAMES                                     *
/**********************************************************************
CONTROL MSG
SET SYSOUTTRAP = 10000
LISTCAT VOLUME LEVEL(T.OFF.&DSNQUAL)
SET SYSOUTTRAP = 0
SET A = &SYSOUTLINE
CONTROL NOMSG

/**********************************************************************
/* LOAD THE TABLE WITH THESE                                          *
/**********************************************************************
DO &B = 1 TO &A
    SET SYSDVAL = &STR(&SYSNSUB(2,&&SYSOUTLINE&B))
    READDVAL PARMA PARMB PARMC PARMD
    SELECT
        WHEN (&STR(&PARMA)=&STR(NONVSAM)) SET DATASET = &STR(&PARMC)
        WHEN (&SYSINDEX(&STR(VOLSER-),&STR(&PARMA))>0) DO
            SET VOLUME = &SUBSTR(&LENGTH(&STR(&PARMA))-5:+
                                 &LENGTH(&STR(&PARMA)),+
                                 &STR(&PARMA))
            IF &DATATYPE(&VOLUME) = CHAR THEN SET VOLUME =
        END
        OTHERWISE SET VOLUME =
    END
    IF &STR(&VOLUME) >      THEN +
        DO
            SET DATASET = &STR( &DATASET)+
                          &STR(          )+
                          &STR(          )+
                          &STR(          )+
                          &STR(          )
            SET DATASET = &STR( ¦&VOLUME¦)+
                          &SUBSTR(1:40,+
                          &STR(&DATASET))+
                          &STR(&SUFFIX)
            ISPEXEC TBADD TEMPTABL
            SET VOLUME =
        END
END

/**********************************************************************
/* GET OUT IF NO TAPES WERE FOUND                                     *
/**********************************************************************
ISPEXEC TBSTATS TEMPTABL ROWCURR(NUMROWS)
IF &NUMROWS < 1 THEN +
    DO
        SET ZEDLMSG = &STR(*** NO "&DSNQUAL" TAPE DATASETS FOUND ***)
        ISPEXEC SETMSG MSG(UTLZ001W)
        EXIT
    END

/**********************************************************************
/* TELL THE USER WHAT'S HAPPENING                                     *
/**********************************************************************
SET ZEDLMSG = &STR(*** CREATING THE TMS UPDATE FORM ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)

/**********************************************************************
/* CREATE THE TMS UPDATE FORM                                         *
/**********************************************************************
SET TEMPFORM = &STR(&SYSUID..TEMP.TMS.FORM)
DELETE '&TEMPFORM'
FREE DDNAME(ISPFILE)
ALLOCATE DDNAME(ISPFILE) DSN('&TEMPFORM') +
         NEW CATALOG +
         UNIT(SYSDA) VOLUME(WRK$$$) +
         SPACE(1,1) CYLINDERS RELEASE +
         RECFM(F B A) LRECL(80) BLKSIZE(23440) DSORG(PS)

ISPEXEC FTOPEN
ISPEXEC FTINCL SCRATCH
SET SAVECC = &LASTCC
ISPEXEC FTCLOSE
FREE DDNAME(ISPFILE)

IF &SAVECC > 0 THEN +
    DO
        ISPEXEC VGET ZERRLM
        SET ZEDSMSG = &STR(FORM CREATION ERROR)
        SET ZEDLMSG = &STR(&ZERRLM)
        ISPEXEC SETMSG MSG(UTLZ001)
    END
ELSE +
    DO
        SET ZEDLMSG = &STR(REVIEW RESULTS, DELETE UNNEEDED LINES, +
                           SAVE, TYPE PRINTIT ON +
                           CMD LINE TO PRINT)
        ISPEXEC SETMSG MSG(UTLZ001W)
        ISPEXEC EDIT DATASET('&TEMPFORM')
    END

ISPEXEC TBEND TEMPTABL

EXIT


/**********************************************************************
/* DISPLAY ANY "HELP" WHICH IS AVAILABLE FOR THIS UTILITY             *
/**********************************************************************
HELPSEC: +
ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL)
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR SCRATCH UTILITY +
                   *** NO PROCESSING PERFORMED ***)
ISPEXEC SETMSG MSG(UTLZ000)
EXIT