Mainframe Utility: GDGGEN

Return to Mainframe Utilities Page

Module


/*******************************************************************/
/* CLIST : GDGGEN                                                  */
/* CREATED BY : DAVID LEIGH                                        */
/* DATE : 6-22-89                                                  */
/* DESCRIPTION : THIS CLIST TAKES THE INPUT DATASET AND OUTPUTS    */
/*               THE GDG GEN NODES IN THE FOLLOWING VARIABLES:     */
/*               LIMIT - THE NUMBER OF GENERATIONS ALLOWED FOR THIS*/
/*                       INDEX.                                    */
/*               GEN - HOW MANY DATASETS ARE ASSOCIATED WITH THIS  */
/*                     INDEX.                                      */
/*               ZEROGEN - THE CURRENT "0" GENERATION DATASET.     */
/*               NEXTGEN - WHAT THE "+1" DATASET WOULD BE CALLED   */
/*                         GIVEN THE CURRENT INDEX STATUS.         */
/*               MINUS0 - THE NAMES OF EACH OF THE EXISTING ACTUAL */
/*                THRU    DATASETS FOR THIS INDEX.  MINUS0 WILL BE */
/*               MINUSX   THE SAME AS ZEROGEN.  "X" IN "MINUSX" IS */
/*                        EQUAL TO "GEN - 1".                      */
/*               ALL OF THESE VARIABLES ARE THEN "VPUT" INTO THE   */
/*               ISPF SHARED POOL.                                 */
/*               IF THIS CLIST IS CALLED FROM THE COMMAND LINE,    */
/*               THE USER WILL BE PROMPTED FOR A GDG INDEX BASE    */
/*               NAME, AND THE INFORMATION WILL BE DISPLAYED AT    */
/*               THE TERMINAL.                                     */
/*******************************************************************/
PROC 0 DSN() EXCODE(0) HELP DEBUG
/**** SET MESSAGE DISPLAY ON/OFF BASED ON THE DEBUG SWITCH ***/
IF &DEBUG = DEBUG THEN CONTROL MSG LIST CONLIST SYMLIST NOFLUSH
ELSE  CONTROL NOMSG NOLIST NOFLUSH NOPROMPT
IF &HELP = &STR(HELP) THEN GOTO HELPSEC

IF &SYSNEST = NO AND &STR(&DSN) =     THEN +
    DO
        WRITENR ENTER GDG INDEX BASE NAME ==>
        READ DSN
        IF &STR(&DSN) =    THEN +
            DO
                SET ZEDLMSG = &STR(*** NO DATASET NAME ENTERED *** +
                                   NO PROCESSING PERFORMED)
                IF &SYSISPF = ACTIVE THEN ISPEXEC SETMSG MSG(UTLZ001)
                ELSE WRITE &STR(&ZEDLMSG)
                EXIT
            END
    END

IF &SYSNEST = YES AND &STR(&DSN) =    THEN EXIT CODE(12)

SET SYSOUTTRAP = 1000
LISTCAT ENTRY('&DSN') GDG ALL
SET EXCODE = &LASTCC
SET SYSOUTTRAP = 0

IF &EXCODE > 4 THEN +
    DO
        SET ZEDLMSG = &STR("&DSN" ERROR : &SYSDSN('&DSN'))
        IF &SYSISPF = ACTIVE THEN ISPEXEC SETMSG MSG(UTLZ001)
        ELSE WRITE &STR(&ZEDLMSG)
        EXIT CODE(&EXCODE)
    END

SET GEN = 0
SET ALLVAR = &STR(LIMIT GEN)
SET I = &SYSOUTLINE

DO WHILE &I > 0
    SET SYSUT2 = &STR(&&SYSOUTLINE&I)
    SET LEN = &LENGTH(&STR(&SYSUT2))
    SELECT
        WHEN (&SUBSTR(7:13,&STR(&SYSUT2)) = &STR( LIMIT-)) DO
            SET LIMIT = &SUBSTR(31:31,&STR(&SYSUT2))
            IF &DATATYPE(&SUBSTR(30:30,&STR(&SYSUT2))) = NUM THEN +
                SET LIMIT = &STR(&SUBSTR(30:30,&STR(&SYSUT2))&LIMIT)
            IF &DATATYPE(&SUBSTR(29:29,&STR(&SYSUT2))) = NUM THEN +
                SET LIMIT = &STR(&SUBSTR(29:29,&STR(&SYSUT2))&LIMIT)
            SET LIMIT = &LIMIT
            SET I = 0
        END
        WHEN (&SUBSTR(7:16,&STR(&SYSUT2)) = &STR( NONVSAM--)) DO
            SET MINUS&GEN = &SUBSTR(17:&LEN,&STR(&SYSUT2))
            IF &GEN = 0 THEN +
                DO

                    SET ZEROGEN = &STR(&MINUS0)
                    SET ALLVAR = &STR(&ALLVAR ZEROGEN NEXTGEN)
                    SET X = &LENGTH(&STR(&ZEROGEN))
                    SET Y = &X - 1
                    SET VER = &SUBSTR(&Y:&X,&STR(&ZEROGEN))
                    SET Y = &X - 3
                    SET Z = &X - 6
                    SET XGEN = &SUBSTR(&Z:&Y,&STR(&ZEROGEN))
                    SET XGEN = &XGEN + 1
                    IF &XGEN > 9999 THEN +
                        DO
                            SET VER = &VER + 1
                            SET XGEN = 1
                        END
                    SET NEXTGEN = &STR(&SUBSTR(1:+
                                       &LENGTH(&STR(&ZEROGEN))-8,+
                                       &STR(&ZEROGEN))+
                                       G&SUBSTR(+
                                       &LENGTH(&STR(000&XGEN))-3:+
                                       &LENGTH(&STR(000&XGEN)),+
                                       &STR(000&XGEN))+
                                       V&SUBSTR(&LENGTH(&STR(0&VER))-1:+
                                       &LENGTH(&STR(0&VER)),+
                                       &STR(000&VER)))
                END
            SET ALLVAR = &STR(&ALLVAR MINUS&GEN)
            SET GEN = &GEN + 1
        END
    END
    SET I = &I - 1
END

IF &STR(&ZEROGEN) =     THEN +
    DO
        SET NEXTGEN = &STR(&DSN..G0001V00)
        SET ALLVAR = &STR(&ALLVAR NEXTGEN)
        SET EXCODE = 4
    END

IF &SYSISPF ¬= ACTIVE OR &SYSNEST = NO THEN +
    DO
        WRITE BASE(&DSN)
        WRITE LIMIT(&LIMIT)
        WRITE GEN(&GEN)
        WRITE ZEROGEN(&ZEROGEN)
        WRITE NEXTGEN(&NEXTGEN)
        DO &I = 0 TO &EVAL(&GEN - 1)
            SET X = &&MINUS&I
            WRITE MINUS&I(&X)
        END
    END
ELSE  +
    ISPEXEC VPUT (&ALLVAR) SHARED

EXIT CODE(&EXCODE)

HELPSEC: +
ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL)
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR GDGGEN UTILITY +
                   *** NO PROCESSING PERFORMED ***)
ISPEXEC SETMSG MSG(UTLZ000)
EXIT
            


Documentation

 This utility can be called from a CLIST to evaluate relative GDG generation
 numbers for a dataset, and convert them into "GOOVOO's" to enable the CLIST to
 process the dataset.  When you invoke GDGGEN you pass the keyword parm "DSN".
 GDGGEN will then VPUT the following variables into the SHARED pool.
 
 LIMIT - The number of generations allowed for this GDG index.
 
 NEXTGEN - The GOOVOO for the "+1" version of the dataset.
 
 MINUS0 thru MINUS999 (where 999 = the LIMIT of this index) - The GOOVOO for
 each relative generation number on the index.            


Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.