/* REXX */ /* */ /* FOR THE REPORTING OF MERGED VALUES OF PROCESSOR SYMBOLICS AND */ /* PROCESSOR GROUP OVERRIDES. */ /* REQUIRES TWO INPUTS: */ /* 1) A PDS containing all processors which contain symbolics */ /* you want to report from. */ /* 2) A sequential file or PDS(MEMBER) containing Endevor batch */ /* Admin SCL. */ /* */ /* WRITTEN BY DAN WALTHER */ /* */ ARG PROCESSORS SEL_ACTION ; TRACE O ; RETCODE = 0 ; /* */ /* DEFAULTS: */ /* */ /* Reconstruct Endevor mapping of environments and stages. */ /* */ NDVR_MAP = 'SMPLTEST/1 SMPLTEST/2 SMPLPROD/1 SMPLPROD/2 ' ; NDVR_STGIDS =' T Q E P ' ; NDVR_STAGES =' TEST QA EMER PROD ' ; /* */ /* */ /* */ CMP_SYSLIB_CONCATENATION = ' ', ' CSYSLIB1 CSYSLIB2 CSYSLIB3 CSYSLIB4 ' /* */ LNK_SYSLIB_CONCATENATION = ' ', ' LSYSLIB1 LSYSLIB2 LSYSLIB3 LSYSLIB4 ' ; /* */ LNK_OBJLIB_CONCATENATION = ' ' ; /* */ USERLIB_CONCATENATION = ' ' ; /* */ "EXECIO * DISKR DEFINESI (STEM" INPUT. /* */ OVERRIDES = ' ' ; C1ACTION = ' ' ; DO I = 1 TO INPUT.0 WORD_ONE = WORD(INPUT.I,1) ; WORD_TWO = WORD(INPUT.I,2) ; WORD_THREE = WORD(INPUT.I,3) ; SELECT WHEN WORD_ONE = 'EOF' then exit ; WHEN WORD_ONE = 'BASE' & WORD_TWO = 'LIBRARY' THEN, DO C1BASELIB = , TRANSLATE(WORD(INPUT.I,3),,"'(), <>"); C1BASELIB = STRIP(C1BASELIB) ; SA= 'C1BASELIB =' C1BASELIB; END; WHEN WORD_ONE = '.' THEN, DO J = I + 1 ; IF C1ACTION /= ' ' &, STRIP(INPUT.J) /= 'DEFINE PROCESSOR SYMBOL' THEN, DO IF PROCESSR /= '*NOPROC*' THEN, CALL EXAMINE_PROCESSOR ; VARIABLES = ' '; OVERRIDES = ' ' ; C1ACTION = ' ' ; END; END; WHEN WORD_ONE = 'DEFINE' &, WORD_TWO = 'SUBSYSTEM' THEN, DO C1SU = TRANSLATE(WORD_THREE,,"'(), .<>"); C1SU = STRIP(C1SU); C1SUBSYS = C1SU ; SA= 'C1SUBSYS =' C1SUBSYS; END; WHEN WORD_ONE = 'DEFINE' &, WORD_TWO = 'PROCESSOR' &, WORD_THREE = 'GROUP' THEN, DO INPUT_REC = I; C1PRGRP = TRANSLATE(WORD(INPUT.I,4),,"'(), .<>"); C1PRGRP = STRIP(C1PRGRP) ; SA= 'C1PRGRP =' C1PRGRP; J = I + 1; /* ENV ON NEXT LINE */ C1ENVMNT = TRANSLATE(WORD(INPUT.J,3),,"'(), .<>"); C1ENVMNT = STRIP(C1ENVMNT) ; SA= 'C1ENVMNT =' C1ENVMNT; J = J + 1; /* SYS ON NEXT LINE */ C1SYSTEM = TRANSLATE(WORD(INPUT.J,2),,"'(), .<>"); C1SYSTEM = STRIP(C1SYSTEM) ; SA= 'C1SYSTEM =' C1SYSTEM; J = J + 1; /* TYP ON NEXT LINE */ C1ELTYPE = TRANSLATE(WORD(INPUT.J,2),,"'(), .<>"); C1ELTYPE = STRIP(C1ELTYPE) ; SA= 'C1ELTYPE =' C1ELTYPE; J = J + 1; /* STG ON NEXT LINE */ C1STGID2 = C1ENVMNT||'/2' DO K = 1 TO WORDS(NDVR_MAP) , UNTIL C1STGID2 = WORD(NDVR_MAP,K) NOP ; END C1STAGE2 = WORD(NDVR_STAGES,K) ; C1ST2 = C1STAGE2; C1STGNUM = TRANSLATE(WORD(INPUT.J,3),,"'(), .<>"); C1STGNUM = STRIP(C1STGNUM) ; C1STGID = C1ENVMNT||'/'||C1STGNUM; DO K = 1 TO WORDS(NDVR_MAP) , UNTIL C1STGID = WORD(NDVR_MAP,K) NOP ; END C1STGID = WORD(NDVR_STGIDS,K) ; C1STAGE = WORD(NDVR_STAGES,K) ; C1ST = C1STAGE ; SA= 'C1STGNUM =' C1STGNUM ; SA= 'C1STGID =' C1STGID ; SA= 'C1STAGE =' C1STAGE ; C1ACTION = SEL_ACTION ; C1SENVMNT = C1ENVMNT ; C1SSTGID = C1STGID ; C1SY = C1SYSTEM ; C1SSYSTEM = C1SYSTEM ; C1TY = C1ELTYPE ; END; WHEN WORD_ONE = SEL_ACTION & WORD_TWO = 'PROCESSOR' &, WORD_THREE = 'NAME' THEN, DO PROCESSR = TRANSLATE(WORD(INPUT.I,5),,"'(), .<>") ; PROCESSR = STRIP(PROCESSR) ; SA= 'PROCESSR =' PROCESSR; END; WHEN WORD_ONE = 'PROCESSOR' & WORD_TWO = 'TYPE' THEN, DO PROCESSOR_TYPE = STRIP(WORD(INPUT.I,4)) ; LAST_WRITTEN = I ; END; WHEN WORD_ONE = 'SYMBOL' &, PROCESSOR_TYPE = SEL_ACTION THEN, DO POSITION = POS('=',INPUT.I) ; SYM_NAME = STRIP(SUBSTR(INPUT.I,1,POSITION-1)) ; SYM_NAME = STRIP(WORD(SYM_NAME,2)) ; SYM_NAME = TRANSLATE(SYM_NAME,,"'(), .<>"); SA= 'SYM_NAME =' SYM_NAME; SYM_VALU = SUBSTR(INPUT.I,POSITION+1) ; IF SUBSTR(SYM_VALU,1,1) = "'" THEN, DO END_POS = POS("'",SYM_VALU,2); SYM_VALU = SUBSTR(SYM_VALU,1,END_POS); END; ELSE, IF SUBSTR(SYM_VALU,1,1) = '"' THEN, DO END_POS = POS('"',SYM_VALU,2); SYM_VALU = SUBSTR(SYM_VALU,1,END_POS); END; ELSE, SYM_VALU = WORD(SYM_VALU,1); SYM_VALU = STRIP(SYM_VALU,T,",") ; IF SUBSTR(SYM_VALU,1,1) = "'" |, SUBSTR(SYM_VALU,1,1) = '"' THEN, WORK_STRING = SYM_NAME " = "SYM_VALU ; ELSE, WORK_STRING = SYM_NAME " = '"SYM_VALU"'" ; IF LENGTH(SYM_VALU) = 0 THEN, DO /* SYM_VALU VALUE IS ON NEXT LINE */ J = I + 1; /* CONCATENATE NEXT LINE */ WORK_STRING = INPUT.I || SUBSTR(INPUT.J,1,72) ; SYM_VALU = STRIP(SUBSTR(WORK_STRING,POSITION+1)) ; END ; SA= 'SYM_VALU =' SYM_VALU; VARIABLES = VARIABLES SYM_NAME ; WORK_STRING = TRANSLATE(WORK_STRING,'_',' '); OVERRIDES = OVERRIDES WORK_STRING ; END; /* OF WHEN .... */ OTHERWISE, NOP; /* OF WHEN .... */ END; /* OF SELECT ... */ END; /* OF DO .... */ /* */ IF WORDS(VARIABLES) > 0 & PROCESSR /= '*NOPROC*' THEN, CALL EXAMINE_PROCESSOR ; /* */ EXIT 0 EXAMINE_PROCESSOR : SA= '*ENTERING EXAMINE_PROCESSOR' ; TEMPDSN = PROCESSORS'('PROCESSR')' ; DSNCHECK = SYSDSN("'"TEMPDSN"'") ; IF DSNCHECK /= OK THEN, DO SAY '??? CANNOT FIND PROCESSOR ' PROCESSR; RETURN(8) ; END; /* */ OUT_CNT = 0 ; VARIABLES = " " ; /* LIST OF VARIABLES IN PROCESSOR */ VAR_FLAGS = " " ; /* LIST OF FLAGS 4 VARIABLES IN PROCESSOR */ /* Y = VARIABLE HAS BEEN FULLY EVALUATED */ /* N = VARIABLE NOT BEEN FULLY EVALUATED */ /* */ TEMPDSN = PROCESSORS'('PROCESSR')' ; SA= "ALLOCATING " TEMPDSN ; SAY '**ENVIRONMENT='C1ENVMNT 'STAGE='C1STAGE, ' SYSTEM='C1SYSTEM 'TYPE='C1ELTYPE 'PROCGROUP='C1PRGRP ; ADDRESS TSO, "ALLOC F(PROCESSR)", "DA('"TEMPDSN"') SHR REUSE " ; /* */ FOUND_1ST_STEP = 0 ; /* */ STEP_NAME = '???' ; IS_IT_STEP = 0 ; /* */ /* GET VARIABLES IN PROCESSOR AND SAVE DEFAULT VALUES */ /* */ DO UNTIL (IS_IT_STEP > 0) | (RETCODE > 0) CALL GET_NEXT_RECORD ; IF IS_IT_STEP > 0 | RETCODE > 0 THEN LEAVE; IF FOUND_1ST_STEP = 0 THEN, DO FOREVER POSITION = POS('=',PROCREC.1) ; IF POSITION = 0 THEN LEAVE; PROCREC.1 = OVERLAY(' ',PROCREC.1,POSITION) ; TEMP = WORDS(SUBSTR(PROCREC.1,1,POSITION-1)) ; SYM_NAME = WORD(PROCREC.1,TEMP) ; IF SUBSTR(PROCREC.1,POSITION+1,1) = "'" THEN, DO END_POS = POS("'",PROCREC.1,POSITION+2); IF END_POS = 0 THEN SYM_VALU = ''; ELSE, DO SYMB_LNTH = END_POS - POSITION; SYM_VALU = SUBSTR(PROCREC.1,POSITION+1,SYMB_LNTH) END; END; /* IF SUBSTR(PROCREC.1,POSITION+1,1) = "'" THEN */ ELSE, IF SUBSTR(PROCREC.1,POSITION+1,1) = '"' THEN, DO END_POS = POS('"',PROCREC.1,POSITION+2); IF END_POS = 0 THEN SYM_VALU = ''; ELSE, DO SYMB_LNTH = END_POS - POSITION; SYM_VALU = SUBSTR(PROCREC.1,POSITION+1,SYMB_LNTH) END; END; /* IF SUBSTR(PROCREC.1,POSITION+1,1) = '"' THEN */ ELSE, IF SUBSTR(PROCREC.1,POSITION+1,1) = ',' THEN, DO SYM_VALU = '' ; END_POS = POSITION; END; ELSE, DO POS_COMMA = POS(',',PROCREC.1,POSITION+1); POS_LPARN = POS('(',PROCREC.1,POSITION+1); IF POS_COMMA > 0 & POS_LPARN = 0 THEN, TMP_VALU = OVERLAY(' ',PROCREC.1,POS_COMMA) ; ELSE, IF POS_COMMA > 0 & POS_COMMA < POS_LPARN THEN, TMP_VALU = OVERLAY(' ',PROCREC.1,POS_COMMA) ; ELSE, IF POS_LPARN > 0 & POS_LPARN < POS_COMMA THEN, DO POS_RPARN = POS(')',PROCREC.1,POSITION+1); TMP_VALU = OVERLAY(' ',PROCREC.1,POS_RPARN+1); END; ELSE, TMP_VALU = PROCREC.1 ; SYM_VALU = WORD(SUBSTR(TMP_VALU,POSITION+1),1) ; END_POS = POSITION + LENGTH(SYM_VALU); END; SYM_VALU = STRIP(SYM_VALU,T,",") ; IF SUBSTR(SYM_VALU,1,1) = "'" |, SUBSTR(SYM_VALU,1,1) = '"' THEN, WORK_STRING = SYM_NAME " = "SYM_VALU ; ELSE, WORK_STRING = SYM_NAME " = '"SYM_VALU"'" ; SAY 'PROCESSOR 'PROCESSR 'DEFAULT (SYMBOLIC/VALUE): ', SYM_NAME '=' , SYM_VALU ; INTERPRET WORK_STRING ; IF WORDPOS(SYM_NAME,VARIABLES) = 0 THEN, VARIABLES = VARIABLES SYM_NAME ; IF END_POS > 78 THEN LEAVE; IF SUBSTR(PROCREC.1,END_POS+1,1) = ' ' THEN LEAVE; IF SUBSTR(PROCREC.1,END_POS+1,1) = ',' &, SUBSTR(PROCREC.1,END_POS+2,1) = ' ' THEN LEAVE; PROCREC.1 = SUBSTR(PROCREC.1,END_POS+2) ; END; /* DO FOREVER ... */ END; /* DO UNTIL ... */ /* */ "EXECIO 0 DISKR PROCESSR (FINIS" ; /* */ /* APPLY OVERRIDES TO PROCESSOR SYMBOLICS */ /* */ IF WORDS(OVERRIDES) > 0 THEN, DO K = 1 TO WORDS(OVERRIDES) TEMP = WORD(OVERRIDES,K) ; TEMP = TRANSLATE(TEMP,' ','_'); SAY 'OVERRIDE: ' TEMP ; INTERPRET TEMP ; END; /* */ /* SOME SYMBOLICS MAY BE ASSIGNED VALUES CONTAINING OTHER */ /* SYMBOLICS. EX COPYLIB=&HILVL..&C1SYS..COPYLIB */ /* RESOLVE THEM DOWN TO LOWER VALUE */ /* */ CALL SYMBOLICS_LOOP; /* */ /* DO UNTIL (STEP_NAME = 'BKUPPROD') | (RETCODE > 0) */ /* CALL GET_NEXT_RECORD ; */ /* END; /* DO UNTIL ... */ */ /* */ /* DO UNTIL (DD_NAME = 'O' ) | (RETCODE > 0) */ /* CALL GET_NEXT_RECORD ; */ /* END; /* DO UNTIL ... */ */ /* */ /* IF RETCODE = 0 THEN, */ /* CALL PROCESS_DSN PROCREC.1 1 ; /* RECORD CONCAT COUNT */ */ /* */ "EXECIO 0 DISKR PROCESSR (FINIS" ; /* */ /* REPORT ........... */ /* */ /* IF Q = NEVERQ THEN, */ CALL REPORT_SYMBOLS; DELSTACK; NEWSTACK; /* */ RETURN ; /* */ SYMBOLICS_LOOP: SA= '*ENTERING SYMBOLICS_LOOP' ; VARIABLES = VARIABLES ' ' ; SA= 'VARABLES=' VARIABLES ; SA= 'WORDS IN VARIABLES=' WORDS(VARIABLES) ; VAR_FLAGS = COPIES(' N',WORDS(VARIABLES)) ; /* */ DO VAR1 = 1 TO WORDS(VARIABLES) DO VARIABLE# = 1 TO WORDS(VARIABLES) IF WORD(VAR_FLAGS,VARIABLE#) = 'N' THEN, DO SYM_NAME = WORD(VARIABLES,VARIABLE#) ; SA= 'STILL UNRESOLVED IS VARIABLE ' SYM_NAME CALL RESOLVE_SYMBOLIC ; END; /* IF WORD(VAR_FLAGS,VARIABLE#) = 'N' THEN */ /* */ END ; /* DO VARIABLE# = 1 TO WORDS(VARIABLES) */ UNDONE = POS('N',VAR_FLAGS) ; IF UNDONE = 0 THEN LEAVE; END ; /* DO VAR1 = 1 TO WORDS(VARIABLES) */ SA= '**RESOLVED**' ; RETURN ; /* */ RESOLVE_SYMBOLIC: SA= '*ENTERING RESOLVE_SYMBOLIC' ; POSITION = 1 ; DO FOREVER ; TEMP = 'SYM_VALU = ' SYM_NAME ; INTERPRET TEMP ; SA= '***' SYM_NAME '=' SYM_VALU 'POSITION=' POSITION ; POSITION = POS("&",SYM_VALU,POSITION) ; SUBSTRINGING = 'N' ; /* ASSUME NO UNTIL PROVEN YES */ IF POSITION = 0 | LENGTH(SYM_VALU) < 2 THEN, DO IF SYM_NAME /= 'TEMP_DSN' THEN, DO PLACE = WORDINDEX(VAR_FLAGS,VARIABLE#); VAR_FLAGS =OVERLAY('Y',VAR_FLAGS,PLACE) ; END; LEAVE; END ; /* IF POSITION ... */ ELSE, DO POSITION_PERIOD = POS(".",SYM_VALU,POSITION) ; POSITION_COMMA = POS(",",SYM_VALU,POSITION) ; POSITION_BLANK = POS(" ",SYM_VALU,POSITION) ; POSITION_QUOTN = POS("'",SYM_VALU,POSITION) ; POSITION_QUOTD = POS('"',SYM_VALU,POSITION) ; POSITION_AMPER = POS('&',SYM_VALU,POSITION+1) ; POSITION_PAREN = POS("(",SYM_VALU,POSITION) ; POSITION_END = LENGTH(SYM_VALU) + 1 ; IF POSITION_PERIOD > 0 &, POSITION_PERIOD < POSITION_END THEN, POSITION_END = POSITION_PERIOD ; IF POSITION_COMMA > 0 &, POSITION_COMMA < POSITION_END THEN, POSITION_END = POSITION_COMMA ; IF POSITION_BLANK > 0 &, POSITION_BLANK < POSITION_END THEN, POSITION_END = POSITION_BLANK ; IF POSITION_QUOTN > 0 &, POSITION_QUOTN < POSITION_END THEN, POSITION_END = POSITION_QUOTN ; IF POSITION_QUOTD > 0 &, POSITION_QUOTD < POSITION_END THEN, POSITION_END = POSITION_QUOTD ; IF POSITION_AMPER > 0 &, POSITION_AMPER < POSITION_END THEN, POSITION_END = POSITION_AMPER ; SA= SUBSTR(SYM_VALU,(POSITION_PAREN+1),1) ; /* DATATYPE(SUBSTR(SYM_VALU,(POSITION_PAREN+1),1)) /= 'NUM' &, */ IF POSITION_PAREN > 0 &, POSITION_PAREN < POSITION_END THEN, DO POSITION_END = POSITION_PAREN ; TEMP = SUBSTR(SYM_VALU,POSITION_PAREN) ; TEMP = TRANSLATE(TEMP,' ',',()'); IF WORDS(TEMP) > 1 THEN, DO SUBSTRING_POS = WORD(TEMP,1) ; SUBSTRING_LEN = WORD(TEMP,2) ; IF DATATYPE(SUBSTRING_POS) = 'NUM' &, DATATYPE(SUBSTRING_LEN) = 'NUM' THEN, SUBSTRINGING = 'Y' ; END ; /* IF WORDS(TEMP) > 1 THEN */ END ; /* IF POSITION_PAREN > 0 & ... */ TEMP_LEN = POSITION_END - POSITION ; INCL_NAME = SUBSTR(SYM_VALU,POSITION,TEMP_LEN) ; INCL_NAME = STRIP(INCL_NAME,B,'&') ; INCL_NAME = STRIP(INCL_NAME,T,')') ; INCL_NAME = STRIP(INCL_NAME,T,'(') ; ENTRY = WORDPOS(INCL_NAME,VARIABLES) ; IF ENTRY > 0 THEN, ENTRY_RESOLVED = WORD(VAR_FLAGS,ENTRY); ELSE, IF SUBSTR(INCL_NAME,1,2) = 'C1' THEN, DO SIGNAL ON SYNTAX ; IF DATATYPE(INCL_NAME,S) = 0 THEN CALL SYNTAX; ELSE, IF INCL_NAME = VALUE(INCL_NAME) THEN, INCL_NAME = '$'INCL_NAME; ENTRY_RESOLVED = 'Y' ; END ; ELSE, ENTRY_RESOLVED = 'N' ; IF ENTRY_RESOLVED = 'Y' THEN, DO TEMP = "INCL_VALU ="INCL_NAME ; INTERPRET TEMP ; IF SUBSTRINGING = 'Y' THEN, DO POSITION_END = POS(")",SYM_VALU,POSITION) + 1 ; TEMP_LEN = POSITION_END - POSITION ; INCL_VALU = SUBSTR(INCL_VALU,SUBSTRING_POS,SUBSTRING_LEN) END; /* IF SUBSTRINGING = 'Y' THEN */ WORK_STRING = SYM_NAME "= '"SYM_VALU; SAY 'SUBSTITUTING FROM: ' WORK_STRING; IF SUBSTR(SYM_VALU,POSITION_END,1) = '.' &, SUBSTRINGING /= 'Y' then, DO HEADER = SUBSTR(SYM_VALU,1,POSITION_END-1); NEXTCHAR = SUBSTR(SYM_VALU,POSITION_END+1,1) ; TRAILER = SUBSTR(SYM_VALU,POSITION_END+2); IF NEXTCHAR = '.' THEN, TRAILER = STRIP(TRAILER,L,'.'); INCL_VALU = STRIP(INCL_VALU,L,'.'); SYM_VALU = HEADER || NEXTCHAR || TRAILER ; END; WORK_STRING = SYM_NAME "= '"SYM_VALU; WORK_STRING = SYM_NAME "= '", || SUBSTR(SYM_VALU,1,POSITION -1), || INCL_VALU; /* */ IF (POSITION + TEMP_LEN) < LENGTH(SYM_VALU) THEN, WORK_STRING = WORK_STRING, || SUBSTR(SYM_VALU,POSITION_END)"'"; ELSE, WORK_STRING = WORK_STRING || "'" ; SAY 'SUBSTITUTING TO : ' WORK_STRING; INTERPRET WORK_STRING ; POSITION = 1 ; ITERATE ; END; /* IF ENTRY_RESOLVED.... */ ELSE, DO /* CANNOT RESOLVE WO FIRST RESOLVING ANOTHER */ LEAVE; END ; /* IF POSITION ... */ END ; /* ELSE ......... */ END ; /* DO FOREVER */ RETURN ; /* */ SYNTAX: SAY "===>>>SYNTAX-ERROR:"INCL_NAME"="INCL_VALU; RETURN; /* */ REPORT_SYMBOLS: SA= '*ENTERING REPORT_SYMBOLS ' ; /* */ /* REPORT CHANGES ... */ /* */ PUSH '**ENVIRON='C1ENVMNT 'STG='C1STAGE 'SYS='C1SYSTEM, 'SUBS='C1SU 'TYPE='C1ELTYPE 'PRCGRP='C1PRGRP ; "EXECIO 1 DISKW REPORT "; /* */ /* REPORT CHANGES TO THE SYSLIB CONCATENATION AT THE CMP STEP */ /* - OR - */ /* REPORT CHANGES TO THE USERLIB CONCATENATIONS @ CMP STEP */ /* */ PUSH ' SYSLIB/USERLIB CONCATENATIONS AT THE CMP STEP: ' ; "EXECIO 1 DISKW REPORT "; IF LNG= 'CPP' | LNG= 'C39' THEN, THIS_LIST = USERLIB_CONCATENATION ; ELSE, THIS_LIST = CMP_SYSLIB_CONCATENATION ; SYMBOL_COUNT = WORDS(THIS_LIST) ; DO S# = 1 TO SYMBOL_COUNT SYM_NAME = WORD(THIS_LIST,S#) ; IF WORDPOS(SYM_NAME,VARIABLES) = 0 THEN ITERATE ; TEMP = 'SYM_VALU =' SYM_NAME ; INTERPRET TEMP; SYM_NAME = SUBSTR(SYM_NAME' ',1,8) ; PUSH ' SYMBOL 'SYM_NAME'="'SYM_VALU'"' ; "EXECIO 1 DISKW REPORT "; /* TEMP = 'DROP ' SYM_NAME ; */ /* INTERPRET TEMP; */ END ; /* DO S# = 1 TO SYMBOL_COUNT */ /* */ /* REPORT CHANGES TO THE SYSLIB CONCATENATION AT THE LNK STEP */ /* */ PUSH ' SYSLIB CONCATENATIONS AT THE LNK STEP: ' ; "EXECIO 1 DISKW REPORT "; SYMBOL_COUNT = WORDS(LNK_SYSLIB_CONCATENATION) ; DO S# = 1 TO SYMBOL_COUNT SYM_NAME = WORD(LNK_SYSLIB_CONCATENATION,S#) ; IF WORDPOS(SYM_NAME,VARIABLES) = 0 THEN ITERATE ; TEMP = 'SYM_VALU =' SYM_NAME ; INTERPRET TEMP; SYM_NAME = SUBSTR(SYM_NAME' ',1,8) ; PUSH ' SYMBOL 'SYM_NAME'="'SYM_VALU'"' ; "EXECIO 1 DISKW REPORT "; /* TEMP = 'DROP ' SYM_NAME ; */ /* INTERPRET TEMP; */ END ; /* DO S# = 1 TO SYMBOL_COUNT */ /* */ /* REPORT CHANGES TO THE SYSOBJ CONCATENATION AT THE LNK STEP */ /* */ PUSH ' SYSOBJ CONCATENATIONS AT THE LNK STEP: ' ; "EXECIO 1 DISKW REPORT "; SYMBOL_COUNT = WORDS(LNK_OBJLIB_CONCATENATION) ; DO S# = 1 TO SYMBOL_COUNT SYM_NAME = WORD(LNK_OBJLIB_CONCATENATION,S#) ; IF WORDPOS(SYM_NAME,VARIABLES) = 0 THEN ITERATE ; TEMP = 'SYM_VALU =' SYM_NAME ; INTERPRET TEMP; SYM_NAME = SUBSTR(SYM_NAME' ',1,8) ; PUSH ' SYMBOL 'SYM_NAME'="'SYM_VALU'"' ; "EXECIO 1 DISKW REPORT "; /* TEMP = 'DROP ' SYM_NAME ; */ /* INTERPRET TEMP; */ END ; /* DO S# = 1 TO SYMBOL_COUNT */ /* */ /* REPORT ALL OTHER SYMBOLIC VALUES */ /* */ PUSH ' OTHER SYMBOLIC VALUES : ' ; "EXECIO 1 DISKW REPORT "; SYMBOL_COUNT = WORDS(VARIABLES) ; DO S# = 1 TO SYMBOL_COUNT SYM_NAME = WORD(VARIABLES,S#) ; IF WORDPOS(SYM_NAME,THIS_LIST) > 0 THEN ITERATE ; IF WORDPOS(SYM_NAME,LNK_SYSLIB_CONCATENATION) > 0 THEN ITERATE ; IF WORDPOS(SYM_NAME,LNK_OBJLIB_CONCATENATION) > 0 THEN ITERATE ; TEMP = 'SYM_VALU =' SYM_NAME ; INTERPRET TEMP; SYM_NAME = SUBSTR(SYM_NAME' ',1,8) ; PUSH ' SYMBOL 'SYM_NAME'="'SYM_VALU'"' ; "EXECIO 1 DISKW REPORT "; /* TEMP = 'DROP ' SYM_NAME ; */ /* INTERPRET TEMP; */ END ; /* DO S# = 1 TO SYMBOL_COUNT */ /* */ RETURN; /* */ /* READ A RECORD FROM THE PROCESSOR ITSELF */ /* */ GET_NEXT_RECORD : "EXECIO 1 DISKR PROCESSR (STEM" PROCREC. RETCODE = RC ; SA= 'RECORD=' PROCREC.1 ; IF RETCODE > 0 THEN RETURN ; IF SUBSTR(PROCREC.1,1,3) = '//*' THEN SIGNAL GET_NEXT_RECORD ; TEMP_STR = STRIP(SUBSTR(PROCREC.1,3,4)) ; IF LENGTH(TEMP_STR) > 0 THEN, DO DD_NAME = TEMP_STR ; LONG_DD_NAME = WORD(SUBSTR(PROCREC.1,3),1) ; END; IS_IT_STEP = POS('PGM=',PROCREC.1); IF WORD(SUBSTR(PROCREC.1,3),1) = 'IF' THEN IS_IT_STEP = 1 ; IF IS_IT_STEP > 0 THEN, DO LONG_STEP_NAME = STRIP(SUBSTR(PROCREC.1,3,8)) ; STEP_NAME = WORD(SUBSTR(PROCREC.1,3),1) ; PGM_NAME = SUBSTR(PROCREC.1,(IS_IT_STEP+4)); PGM_NAME = TRANSLATE(PGM_NAME,' ',','); PGM_NAME = WORD(PGM_NAME,1); SA= 'PGM_NAME =' PGM_NAME ; END ; /* IF IS_IT_STEP .... */ IF RETCODE > 0 THEN DO DD_NAME = '?END' ; LONG_DD_NAME = '?END' ; LONG_STEP_NAME = '?END' ; STEP_NAME = '?END' ; END; IF STRIP(SUBSTR(PROCREC.1,3,8)) = 'SYSLMOD' THEN, DO POSITION = POS('DSN=',PROCREC.1) ; TEMP_STR = SUBSTR(PROCREC.1,POSITION+4) ; TEMP_STR = TRANSLATE(TEMP_STR,' ','('); TEMP_STR = WORD(TEMP_STR,1) ; IF FOUND_1ST_SYSLMOD = 0 THEN , DO SYSLMOD = TEMP_STR ; FOUND_1ST_SYSLMOD = 1 ; END; /* IF FOUND_1ST_SYSLMOD ... */ ELSE, IF TEMP_STR /= SYSLMOD & CONTINUE_OUT = 'OK' THEN, DO SYSLMOD_OVERRIDE = ' ', "SYMBOL "STRIP(SYSLMOD,L,'&')" = '"TEMP_STR"'" ; END; /* IF TEMP_STR ... */ END; /* IF STRIP(SUBSTR(PROCREC.1,3,8)) = 'SYSLMOD' */ ELSE, IF STRIP(SUBSTR(PROCREC.1,3,8)) = 'DBRMLIB' THEN, DO POSITION = POS('DSN=',PROCREC.1) ; TEMP_STR = SUBSTR(PROCREC.1,POSITION+4) ; TEMP_STR = TRANSLATE(TEMP_STR,' ','('); TEMP_STR = WORD(TEMP_STR,1) ; IF FOUND_1ST_DBRMLIB = 0 THEN , DO DBRMLIB = TEMP_STR ; FOUND_1ST_DBRMLIB = 1 ; END; /* IF FOUND_1ST_DBRMLIB ... */ ELSE, IF TEMP_STR /= DBRMLIB & CONTINUE_OUT = 'OK' THEN, DO DBRMLIB_OVERRIDE = ' ', "SYMBOL "STRIP(DBRMLIB,L,'&')" = '"TEMP_STR"'" ; END; /* IF TEMP_STR ... */ END; /* IF STRIP(SUBSTR(PROCREC.1,3,8)) = 'DBRMLIB' */ RETURN; /* */ RETURN; /* */ PROCESS_DSN: ARG RECORD; /* */ PLACE = POS('DSN=',RECORD); IF PLACE = 0 THEN RETURN 1 ; PLACE = PLACE + 4; /* MARKS START OF DATASET NAME */ PLACE2 = POS(',',SUBSTR(RECORD,PLACE)) ; PLACE2A = POS(' ',SUBSTR(RECORD,PLACE)) ; SELECT WHEN PLACE2A = 0 THEN, PLACE_END = PLACE2 - 1; WHEN PLACE2 = 0 THEN, PLACE_END = PLACE2A - 1; WHEN PLACE2 < PLACE2A THEN, PLACE_END = PLACE2 - 1; OTHERWISE PLACE_END = PLACE2A - 1; END; TEMP_DSN = SUBSTR(RECORD,PLACE,PLACE_END) ; TEMP_DSN = STRIP(TEMP_DSN); SYM_NAME= 'TEMP_DSN' ; CALL RESOLVE_SYMBOLIC; /* */ PUSH '**ENVIRON='C1ENVMNT 'STAGE='C1STAGE, ' SYSTEM='C1SYSTEM 'TYPE='C1ELTYPE 'PROCGROUP='C1PRGRP, 'BACKUP-DATASET='SYM_VALU, 'INPUT_REC='INPUT_REC ; "EXECIO 1 DISKW REPORT " ; /* */ RETURN;