/* REXX */ /* ---------------------------------------------------------------------------------------------------------------- */ /* COPYRIGHT BY SPARKASSEN-RECHENZENTRUM RHEINLAND 1997 GERMANY */ /* ---------------------------------------------------------------------------------------------------------------- */ /* */ /* ICS-TO-WLM CONVERSION-TOOL */ /* -------------------------- */ /* */ /* THIS TOOL CONVERTS THE CLASSIFICATION-RULES FROM AN ICS-MEMBER IN SYS1.PARMLIB INTO A PDS IN WLM-FORMAT. */ /* ADDITIONALLY IT CREATES DUMMY-ENTRIES FOR ALL OTHER TABLES WHICH ARE NECESSARY TO PROVIDE A WORKING DATA SET. */ /* ONE MORE THING IS, THAT ALL INFORMATION CONCERNING ONE RULE HAS TO BE PLACED IN ONE LINE. EXAMPLE : */ /* */ /* SUBSYS=JES2 */ /* TRXNAME=SY188(1),PGN=90 /* PLATTENTEST */ */ /* TRXNAME=SP01(2),PGN=8,RPGN=5500 /* GRUPPE SPAR */ */ /* TRXNAME=SP02(2),PGN=11,RPGN=5500 /* GRUPPE SPAR */ */ /* TRXNAME=ZV(1),RPGN=5390 /* TSO USER ANWENDUNG */ */ /* SUBSYS=STC */ /* TRXNAME=EREP(1),PGN=80 /* EREP+EREPSD */ */ /* TRXNAME=MVSDMP(1),RPGN=5000 /* SYSTEM AS */ */ /* TRXNAME=DUMPSRV(1),RPGN=5000 /* SYSTEM AS */ */ /* */ /* THINGS YOU HAVE TO MAKE AVAILABLE : */ /* */ /* - A DATA SET WHICH CONTAINS AN VALID ICS-MEMBER. MAYBE THERE ARE SOME STATEMENTS WHICH ARE NOT CONVERTED BY THIS */ /* REXX-PROCEDURE. PLEASE DELETE THEM FROM THE MEMBER, TRY AGAIN AND ADD THEM MANUALLY. */ /* - A PARTITIONED DATA SET WHICH CONTAINS ALL EMPTY WLM-TABLES. YOU MAY PRODUCE THIS PO-DATASET BY USING THE ISPF- */ /* ENVIRONMENT OF WLM. ENTER WLM AND CHOSE OPTION >3< "CREATE NEW DEFINITION". SAVE THIS DEFINITION UNDER NAME */ /* &OUTDSN AND OPTION >1< "CREATE DATASET", THEN LEAVE WLM. */ /* - CONCATENATE THE PROC IN YOUR ISPF-TSO-ENVIRONMENT. */ /* */ /* START THIS REXX-PROCEDURE BY ISSUING "TSO %ICS2WLM SYS1.PARMLIB(IEAICS00) &OUTDSN" */ /* */ /* ---------------------------------------------------------------------------------------------------------------- */ ARG ICS2WLM1 ICS2WLM2 /* GET DSN */ IF ICS2WLM1 = '' ! ICS2WLM2 = '' THEN DO SAY 'PLEASE INPUT THE ICS DATASET NAME' PARSE PULL ICS2WLM1 SAY 'PLEASE INPUT THE EMPTY WLM DATASET NAME' PARSE PULL ICS2WLM2 END X1 = SYSDSN( ICS2WLM1 ) /* CHECK IN-DSN VALIDITY */ X2 = SYSDSN( ICS2WLM2 ) /* CHECK PUT-DSN VALIDITY */ IF ( X1 = "OK" ) & ( X2 = "OK" ) THEN DO /* IS VALID ??? */ SAY "CONVERSION STARTED" /* */ CALL START /* YES, THEN CONVERT ICS */ SAY "ICS-MEMBER CONVERTED" /* */ END /* */ ELSE DO /* IS NOT VALID */ SAY ICS2WLM1 "===>" X1 /* PRINT RESULTS */ SAY ICS2WLM2 "===>" X2 /* */ END /* */ EXIT /* EXIT PROCEDURE */ /* ---------------------------------------------------------------------------------------------------------------- */ START: /* */ ADDRESS TSO "ALLOC FI(ICSDATA) DA("ICS2WLM1") SHR" /* ALLOCATE ICS-MEMBER */ ADDRESS ISPEXEC "LIBDEF RULEIN DATASET ID("ICS2WLM2")" /* ALLOCATE TABLES INPUT */ ADDRESS ISPEXEC "LIBDEF RULAUS DATASET ID("ICS2WLM2")" /* ALLOCATE TABLES OUTPUT */ /* ---------------------------------------------------------------------------------------------------------------- */ ADDRESS ISPEXEC "TBOPEN "WLTAB" WRITE LIBRARY(RULEIN)" /* OPEN TABLES */ ADDRESS ISPEXEC "TBOPEN "SCTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "CRTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "RCTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "RGTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "SGTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "ATTRTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "SSTTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "SDCTAB" WRITE LIBRARY(RULEIN)" /* */ ADDRESS ISPEXEC "TBOPEN "SPTAB" WRITE LIBRARY(RULEIN)" /* */ CALL CONVERT /* START CONVERSION */ ADDRESS ISPEXEC "TBCLOSE "SPTAB" LIBRARY(RULAUS)" /* CLOSE TABLES */ ADDRESS ISPEXEC "TBCLOSE "SDCTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "SSTTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "ATTRTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "SGTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "RGTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "RCTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "CRTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "SCTAB" LIBRARY(RULAUS)" /* */ ADDRESS ISPEXEC "TBCLOSE "WLTAB" LIBRARY(RULAUS)" /* */ /* ---------------------------------------------------------------------------------------------------------------- */ ADDRESS TSO "FREE FI(ICSDATA)" /* FREE ICS-MEMBER */ ADDRESS ISPEXEC "LIBDEF RULEIN" /* FREE TABLES INPUT */ ADDRESS ISPEXEC "LIBDEF RULAUS" /* FREE TABLES OUTPUT */ /* ---------------------------------------------------------------------------------------------------------------- */ RETURN /* LEAVE SUB-PROCEDURE */ /* ---------------------------------------------------------------------------------------------------------------- */ CONVERT: /* */ ADDRESS TSO "EXECIO * DISKR ICSDATA (FINIS" /* READ WHOLE ICS-MEMBER */ ADDRESS ISPEXEC "TBTOP "CRTAB /* INITIALISE TABLES */ ADDRESS ISPEXEC "TBTOP "SCTAB /* */ ADDRESS ISPEXEC "TBTOP "WLTAB /* */ ADDRESS ISPEXEC "TBTOP "RCTAB /* */ ADDRESS ISPEXEC "TBTOP "SGTAB /* */ ADDRESS ISPEXEC "TBTOP "RGTAB /* */ ADDRESS ISPEXEC "TBTOP "ATTRTAB /* */ ADDRESS ISPEXEC "TBTOP "SSTTAB /* */ ADDRESS ISPEXEC "TBTOP "SDCTAB /* */ ADDRESS ISPEXEC "TBTOP "SPTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "CRTAB /* INITIALISE VARIABLES */ ADDRESS ISPEXEC "TBVCLEAR "SCTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "WLTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "RCTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "SGTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "RGTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "ATTRTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "SSTTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "SDCTAB /* */ ADDRESS ISPEXEC "TBVCLEAR "SPTAB /* */ SPNAME = "POLICY" /* SET SERVICE POLICY */ SPDESC = "DEFAULT POLICY-NAME" /* */ SPWHOC = "SY567" /* */ SPDATC = "96/01/01" /* */ SPTIMC = "00:00:00" /* */ SPWHOU = "SY567" /* */ SPDATU = "96/01/02" /* */ SPTIMU = "00:00:00" /* */ ADDRESS ISPEXEC "TBADD "SPTAB /* ADD DEFAULT */ SDNAME = "SERVCDEF" /* SET SERVICE-COEFF. */ SDDESC = "DEFAULT SERVICE-DEFINITION" /* */ SDCCPU = "1.0" /* */ SDCIOC = "1.0" /* */ SDCMSO = "1.0" /* */ SDCSRB = "1.0" /* */ ADDRESS ISPEXEC "TBADD "SDCTAB /* SET DEFAULT */ RCWHOC = "SY567" /* SET REPORT STATS */ RCDATC = "96/01/01" /* */ RCTIMC = "00:00:00" /* */ RCWHOU = "SY567" /* */ RCDATU = "96/01/02" /* */ RCTIMU = "00:00:00" /* */ RGWHOC = "SY567" /* SET RESOURCE STATS */ RGDATC = "96/01/01" /* */ RGTIMC = "00:00:00" /* */ RGWHOU = "SY567" /* */ RGDATU = "96/01/02" /* */ RGTIMU = "00:00:00" /* */ SCWHOC = "SY567" /* SET SERVICE-CLASS STATS */ SCDATC = "96/01/01" /* */ SCTIMC = "00:00:00" /* */ SCWHOU = "SY567" /* */ SCDATU = "96/01/02" /* */ SCTIMU = "00:00:00" /* */ SSTWHOC = "SY567" /* SET SUBSYSTEM STATS */ SSTDATC = "96/01/01" /* */ SSTTIMC = "00:00:00" /* */ SSTWHOU = "SY567" /* */ SSTDATU = "96/01/02" /* */ SSTTIMU = "00:00:00" /* */ WLWHOC = "SY567" /* SET WORKLOAD STATS */ WLDATC = "96/01/01" /* */ WLTIMC = "00:00:00" /* */ WLWHOU = "SY567" /* */ WLDATU = "96/01/02" /* */ WLTIMU = "00:00:00" /* */ WLNAME = "DEFLT_WL" /* SET DEFAULT WORKLOAD */ WLDESC = "DEFAULT WORKLOAD" /* */ ADDRESS ISPEXEC "TBADD "WLTAB /* ADD DEFAULT WORKLOAD */ SCNAME = "DEFLT_SC" /* SET DEFAULT SERVICE- */ SCDESC = "DEFAULT SERVICE-CLASS" /* CLASS */ SCWL = "DEFLT_WL" /* WITH DEFAULT WORKLOAD */ ADDRESS ISPEXEC "TBADD "SCTAB /* ADD DEFAULT */ SGSCNAM = "DEFLT_SC" /* SET SERVICE-GOAL FOR */ SGRGNAM = "ALL_SCR" /* DEFAULT-SERVICE-CLASS */ H1 = "00" /* */ M1 = "00" /* */ S1 = "05.000" /* */ I1 = "3" /* */ ADDRESS ISPEXEC "TBADD "SGTAB /* ADD DEFAULT */ ADDRESS ISPEXEC "TBTOP "SSTTAB /* PERFORM SUBSYSTEMTABLE */ ADDRESS ISPEXEC "TBSKIP "SSTTAB /* */ DO WHILE RC = 0 /* */ ADDRESS ISPEXEC "TBGET" SSTTAB /* GET DEFAULTS FROM TABLE */ SSTSC = "DEFLT_SC" /* INSERT DEFAULT SC */ ADDRESS ISPEXEC "TBPUT" SSTTAB /* WRITE SUBSYSTEM BACK */ ADDRESS ISPEXEC "TBSKIP" SSTTAB /* GET NEXT SUBSYSTEM */ END /* */ RGNAME = "ALL_SCR" /* SET GLOBAL DUMMY FOR */ RGDESC = "GLOBALE DUMMY-DEFINITION" /* DEFAULT RESOURCE-GROUP */ ADDRESS ISPEXEC "TBADD "RGTAB /* ADD DEFAULT TO TABLE */ ATRGNAM = "ALL_SCR" /* SET DEFAULT RESOURCES */ ADDRESS ISPEXEC "TBADD "ATTRTAB /* TO ATTRIBUTE-TABLE */ RULES = 0 /* 0 FOUND CLASSF.-RULES */ /* ------------------------------------------------------------------------------------------------------------- */ /* ANALYSE ICS-MEMBER */ /* ------------------------------------------------------------------------------------------------------------- */ DO QUEUED() /* STILL RECORDS AVAILABLE? */ PULL RECORD /* GET NEXT RECORD */ /* ---------------------------------------------------------------------------------------------------------- */ /* PREPARE RECORD FOR PROCESSING */ /* ---------------------------------------------------------------------------------------------------------- */ RECORD = DELSTR( RECORD , LENGTH( RECORD ) - 7 , 8 ) /* DELETE ROW-NUMBER AT END */ X = POS( "/*" , RECORD ) /* IS THERE A COMMENT ? */ IF ( X > 0 ) THEN RECORD = DELSTR( RECORD , X , LENGTH( RECORD ) - X ) /* THEN DELETE */ RECORD = STRIP( RECORD , B , " " ) /* DELETE SPACES LEFT/RIGHT */ /* ---------------------------------------------------------------------------------------------------------- */ /* ADD NEW SUBSTYSEM */ /* ---------------------------------------------------------------------------------------------------------- */ X = POS( 'SUBSYS=' , RECORD ) /* CONTAINS RECORD 'SUBSYS='*/ IF ( X > 0 ) THEN DO /* YES */ RECORD = DELSTR( RECORD , 1 , 7 ) /* DELETE 'SUBSYS=' SUBSTR */ X = POS( ',' , RECORD ) /* ARE THERE DEFAULTS ? */ IF ( X = 0 ) THEN RECORD = SUBSTR( RECORD , 1 , LENGTH( RECORD )) /* TAKE ONLY SUBSYS-NAME */ ELSE RECORD = SUBSTR( RECORD , 1 , X - 1 ) /* */ IF ( RECORD = "JES2" ) THEN RECORD = "JES" /* SET SRZ DEFAULT-NAMES TO */ /* IBM DEFAULT-NAMES */ WLNAME = RECORD /* SET WL-NAME */ WLDESC = "CHANGE WORKLOAD-DEFINITION" /* SET WL-KOMMENTAR */ ADDRESS ISPEXEC "TBADD "WLTAB /* ADD WL-DEFINTION */ END /* */ /* ---------------------------------------------------------------------------------------------------------- */ /* SCAN CLASSIFICATION-LINE */ /* ---------------------------------------------------------------------------------------------------------- */ X = POS( 'TRXNAME=' , RECORD ) /* TEST FOR TRANSACTION */ Y = POS( 'USERID=' , RECORD ) /* TEST FOR USER-ID */ IF ( X > 0 ) ! ( Y > 0 ) THEN DO /* IF CONTAINS ONE OF BOTH */ RULES = RULES + 1 /* INCREASE NUMBER OF RULES */ /* BY ONE */ /* ------------------------------------------------------------------------------------------------------- */ /* GET MASK OF CLASSIFICATION */ /* ------------------------------------------------------------------------------------------------------- */ IF ( X = 0 ) THEN DO /* IF IT IS A USER-ID . */ X = Y /* GET POSITION OF MASK */ RECORD = DELSTR( RECORD , X , 7 ) /* DELETE 'USERID=' */ ART = "UI" /* SET SORT OF MASK */ END /* */ ELSE DO /* IF IT IS TRXNAME */ RECORD = DELSTR( RECORD , X , 8 ) /* DELETE 'TRXNAME=' */ ART = "TN" /* SET SORT OF MASK */ END /* */ AA = POS( '(' , RECORD ) /* GET POSSIBLE END OF MASK */ IF ( AA = 0 ) THEN AA = 999 /* */ BB = POS( ' ' , RECORD ) /* */ IF ( BB = 0 ) THEN BB = 999 /* */ CC = POS( ',' , RECORD ) /* */ IF ( CC = 0 ) THEN CC = 999 /* */ Y = MIN( MIN( AA , BB ) , MIN( AA , CC ) ) /* GET NEXT LIMITER */ IF ( Y = 999 ) THEN DO /* ONLY MASK IN RULE ? */ CRIT = RECORD /* COPY MASK */ RECORD = "" /* DELETE RECORD */ END ELSE DO /* IF THERE IS A LIMITER */ IF ( Y = AA ) THEN DO /* LIMITED BY '(' ? */ CRIT = SUBSTR( RECORD , X , Y - X ) /* COPY MASK */ Z = SUBSTR( RECORD , Y + 1 , 1 ) /* GET START-POS OF MASK */ RECORD = DELSTR( RECORD , X , Y + 4 - X ) /* DELETE MASK AND POSITION */ END /* */ ELSE DO /* */ Y = MIN( BB , CC ) /* GET MINIMUM OF OTHER */ CRIT = SUBSTR( RECORD , X , Y - X ) /* COPY MASK */ RECORD = DELSTR( RECORD , X , Y + 1 - X ) /* DELETE MASK */ Z = 1 /* MASK STARTS ON POS 1 */ END /* */ END /* */ DO WHILE ( LENGTH( CRIT ) < 8 ) & ( Z > 1 ) /* INSERT '%' INSTEAD OF */ CRIT = INSERT( "%" , CRIT , 0 ) /* START-POSITION */ Z = Z - 1 /* */ END /* */ IF ( LENGTH( CRIT ) < 8 ) THEN CRIT = CRIT!!'*' /* SET WILDCARD */ CRSST = WLNAME /* SET SUBSYSTEM */ CRGEN = 1 /* LEVEL = 1 */ CRQT = ART /* SET SORT OF MASK */ CRQTNAM = CRIT /* SET MASK */ /* ------------------------------------------------------------------------------------------------------- */ /* GET REPORT-GROUP OF MASK */ /* ------------------------------------------------------------------------------------------------------- */ RPG = "" /* INIT REPORT-PGN */ X = POS( "RPGN=" , RECORD ) /* GET POSITION IN RECORD */ IF ( X > 0 ) THEN DO /* IS REPORT-PGN SPECIFIED? */ RECORD = DELSTR( RECORD , X , 5 ) /* DELETE 'RPGN=' */ LAUF = X /* GET CHARACTER BELONGING */ DO WHILE ( SUBSTR( RECORD , LAUF , 1 ) ^= ' ' ) &, /* TO REPROT-PGN */ ( SUBSTR( RECORD , LAUF , 1 ) ^= ',' ) &, /* */ ( LAUF < LENGTH( RECORD ) ) /* */ LAUF = LAUF + 1 /* */ END /* */ IF ( SUBSTR( RECORD , LAUF , 1 ) = ',' ) THEN DO /* RPGN LIMITED BY COMMA ? */ RPG = SUBSTR( RECORD , X , LAUF - X ) /* COPY RPGN */ RECORD = DELSTR( RECORD , X , LAUF - X ) /* DELETE RPGN */ END /* */ ELSE DO RPG = SUBSTR( RECORD , X , LAUF - X + 1 ) /* COPY RPGN */ RECORD = DELSTR( RECORD , X , LAUF - X + 1 ) /* DELETE RPGN */ END /* */ END /* */ IF ( RPG ^= "" ) THEN DO /* FOUND REPORT-PGN */ CRRC = RPG /* SET RPGN TO REPROT-CLASS */ RCNAME = CRRC /* SET RPGN TO REPROT-CLASS */ RCDESC = "CHANGE REPORT-CLASS-DEFINITION" /* SET DEFAULT COMMENT */ ADDRESS ISPEXEC "TBADD "RCTAB /* ADD REPORT-PGN */ END /* */ ELSE CRRC ="" /* NORPG? INITIALIZE ! */ /* ------------------------------------------------------------------------------------------------------- */ /* GET PERFORMANCE-GROUP OF MASK */ /* ------------------------------------------------------------------------------------------------------- */ PG = "" /* INIT PG */ X = POS( "PGN=" , RECORD ) /* GET POSITION IN RECORD */ IF ( X > 0 ) THEN DO /* IS PGN SPECIFIED ? */ RECORD = DELSTR( RECORD , X , 4 ) /* DELETE 'RPGN=' */ LAUF = X /* GET CHARACTER BELONGING */ DO WHILE ( SUBSTR( RECORD , LAUF , 1 ) ^= ' ' ) &, /* TO PGN */ ( SUBSTR( RECORD , LAUF , 1 ) ^= ',' ) &, /* */ ( LAUF < LENGTH( RECORD ) ) /* */ LAUF = LAUF + 1 /* */ END /* */ IF ( SUBSTR( RECORD , LAUF , 1 ) = ',' ) THEN DO /* PGN LIMITED BY COMMA ? */ PG = SUBSTR( RECORD , X , LAUF - X ) /* COPY PGN */ RECORD = DELSTR( RECORD , X , LAUF - X ) /* DELETE PGN */ END /* */ ELSE DO /* */ PG = SUBSTR( RECORD , X , LAUF - X + 1 ) /* COPY PGN */ RECORD = DELSTR( RECORD , X , LAUF - X + 1 ) /* DELETE PGN */ END /* */ END /* */ IF ( PG ^= "" ) THEN CRSC = PG /* SET SERVICE-CLASS TO PGN */ ELSE CRSC ="" /* NOPG? INITIALIZE ! */ SCNAME = CRSC /* SET PGN TO CLASSIFICATION*/ SCDESC = "CHANGE SERVICE-CLASS-DEFINITION" /* SET COMMENT */ SCWL = WLNAME /* SET WORKLOAD-NAME */ SGSCNAM = CRSC /* SET PGN TO SERVICE-CLASS */ SGRGNAM = RGNAME /* SET RESOURCEGROUP */ H1 = "00" /* SET SERVICE COEFFICIENTS */ M1 = "00" /* */ S1 = "05.000" /* */ I1 = "3" /* */ ADDRESS ISPEXEC "TBADD "CRTAB /* ADD CLASSIFICATION RULE */ ADDRESS ISPEXEC "TBADD "SCTAB /* ADD SERVICE-CLASS */ ADDRESS ISPEXEC "TBADD "SGTAB /* ADD SERVICE-GROUP */ END /* */ /* ---------------------------------------------------------------------------------------------------------- */ END /* */ RETURN /* RETURN TO CALLER */