/*SUPERC AUTHOR: IBM --- ISPF PDF OPTION 3.13 -- SAMPLIB */ /* MODIFICATIONS HAVE BEEN MADE SEE NOTES BELOW, MODIFIED */ /* "THE REXX MACROS TOOLBOX", DMCRITCHIE@HOTMAIL.COM */ /* UPDATED 1991/06/13 10:53 IS03 */ /********************************************************************/ PROC 0 NEWFILE(DUMMY) OLDFILE(DUMMY) OUTDD(DUMMY) + DELDD(DUMMY) SYSIN(DUMMY) LISTING(DELTA) CTYPE(LINE) + MACRO() + PROCESS() UID(&SYSPREF.) BROWSE EDIT DEBUG PLIB + LIB(SYS1.ISPFPDF.ISRLOAD(ISRSUPC)) /* FOR PRIVATE LIB. OR OUTSIDE ISPF (INSTALLER MUST */ /* MODIFY THE LIB PARAMETER.) */ /*************************************************************/ /*CLIST OBTAINED/MODIFIED FROM SYS1.SAMPLIB(ISRSCLST) */ /* BROWSE EDIT AND MACRO() OPTIONS ADDED */ /* COMPARISON MAY BE MADE TO THE ORIGINAL USING */ /* ==> @COMPARE SYS1.SAMPLIB(ISRSCLST) */ /*************************************************************/ /* //* AS A BATCH JOB /* //XXNAMEXX EXEC SUPERC,PROCESS='SEQ',LISTING=DELTA,SYSOUT=V /* // OLDFILE='SYS6.SAS516.CNTL(XXNAMEXX)',TYPE=WORD, /* // NEWFILE='SYS6.SAS518.CNTL(XXNAMEXX) /*************************************************************/ /* */ /* CLIST NAME : ISRSCLST (SUPERC LINE COMMAND VERSION) */ /* */ /* DESCRIPTION: */ /* */ /* ISRSCLST IS A SAMPLE "LINE COMMAND" CLIST THAT */ /* DEMONSTRATES MOST OF THE CAPABILITY OF SUPERC COMPARE */ /* PROGRAM. IT HAS LIMITED ERROR RECOVERY AND ERROR */ /* DIAGNOSTIC CAPABILITIES. FURTHER, CERTAIN SUPERC */ /* FUNCTIONS ARE NOT SUPPORTED (E.G. APNDLST AND */ /* APNDUPD). */ /* */ /* THIS CLIST HAS BEEN DEVELOPED FOR EXECUTION IN AN */ /* ISPF/PDF ENVIRONMENT. HOWEVER, THERE IS SOME */ /* ADDITIONAL LOGIC (TSO/E R2 DEPENDENT AND A "PLIB" */ /* PARAMETER) THAT WILL ALLOW THE USER TO EXECUTE THE */ /* CLIST OUTSIDE ISPF AND FROM A PRIVATE LIBRARY. */ /* */ /* */ /*************************************************************/ CONTROL NOMSG NOLIST NOCONLIST NOFLUSH /* SET &DEBUG = DEBUG IF &STR(&UID.) = &STR() THEN SET UID=&SYSUID. IF &DEBUG = DEBUG THEN + CONTROL MSG LIST CONLIST SYMLIST SET &RETCC = 0 FREE FI(NEWDD,ISRS,SYSIN,OUTDD,DELDD) IF &NEWFILE = DUMMY THEN + SET &NEWFILE = IF &OLDFILE = DUMMY THEN + SET &OLDFILE = /*************************************************************/ /* SET UP ERROR EXIT BEFORE FOR NEWFILE VERIFICATION. */ /*************************************************************/ NEWDD1:ERROR + DO ERROR OFF IF &NEWFILE ^= THEN + WRITE ** INVALID DATASET NAME/MEMBER OR BUSY: &NEWFILE IF &FIRST = THEN + DO SET &FIRST = DONE IF &UID ^= THEN + DO WRITE + USE FULLY QUALIFIED DATASET NAME WITHOUT QUOTES OR "." + FOR USER PREFIX. WRITE + * EXAMPLE: &UID..SUPERC.NEWIN AND .SUPERC.NEWIN + ARE EQUIVALENT. END ELSE WRITE + * USE FULLY QUALIFIED NAME WITHOUT QUOTES. END SET &NEWFILE = WRITENR NEW FILE :&STR() READ SET &NEWFILE = &SYSDVAL IF &STR('&NEWFILE') = 'EXIT' | &STR('&NEWFILE') = '' THEN + GOTO EXIT ELSE GOTO NEWDD1 END /*************************************************************/ /* VERIFY/ALLOCATE NEWFILE. */ /*************************************************************/ IF &NEWFILE ^= THEN + DO IF &SUBSTR(1:1,&NEWFILE) = . THEN + SET &NEWFILE = &UID..&NEWFILE END CONTROL NOMSG ALLOC FI(NEWDD) DA('&NEWFILE') SHR REUSE IF &SUBSTR(&LENGTH(&NEWFILE):&LENGTH(&NEWFILE),&NEWFILE) = ) + THEN + DO /***********************************************************/ /* INSURE NEWFILE IS SEQUENTIAL AND IF PO- MEMBER EXISTS */ /***********************************************************/ ALLOC FI(ISRS) DA('&NEWFILE') REUSE SHR OPENFILE ISRS CLOSFILE ISRS FREE FI(ISRS) END /*************************************************************/ /* OLDFILE FULLY QUALIFIED? */ /*************************************************************/ CONTROL NOMSG /*************************************************************/ /* ERROR EXIT FOR OLDFILE VERIFICATION. */ /*************************************************************/ OLDDD1:ERROR + DO ERROR OFF IF &OLDFILE ^= THEN + WRITE ** INVALID DATASET NAME/MEMBER OR BUSY: &OLDFILE IF &FIRST = THEN + DO SET &FIRST = DONE IF &UID ^= &STR() THEN + DO WRITE + USE FULLY QUALIFIED DATASET NAME WITHOUT QUOTES OR "." + FOR USER PREFIX. WRITE + * EXAMPLE: &UID..SUPERC.OLDIN AND .SUPERC.OLDIN + ARE EQUIVALENT. END ELSE WRITE + * USE FULLY QUALIFIED NAME WITHOUT QUOTES. END SET &OLDFILE = WRITENR OLD FILE :&STR() READ SET &OLDFILE = &SYSDVAL IF &STR('&OLDFILE') = 'EXIT' | &STR('&OLDFILE') = '' THEN + GOTO EXIT ELSE GOTO OLDDD1 END /*************************************************************/ /* OLD FILE VERIFICATION CODE. */ /*************************************************************/ IF &CTYPE = SRCH THEN + DO IF &SYSIN = DUMMY THEN + SET &SYSIN = PROMPT END ELSE + DO IF &OLDFILE ^= &STR() THEN + DO IF &SUBSTR(1:1,&OLDFILE) = . THEN + SET &OLDFILE = &STR(&UID.&OLDFILE) END ALLOC FI(OLDDD) DA('&OLDFILE') SHR REUSE IF &SUBSTR(&LENGTH(&OLDFILE):&LENGTH(&OLDFILE),&OLDFILE)=) + THEN + DO ALLOC FI(ISRS) DA('&OLDFILE') REUSE SHR OPENFILE ISRS CLOSFILE ISRS FREE FI(ISRS) END END ERROR OFF /*************************************************************/ /* VERIFICATION/ALLOCATION OF LISTING DSN. */ /*************************************************************/ OUTDD1: + IF &OUTDD = DUMMY THEN + DO SET OUTDD = &UID..SUPERC.LIST IF &UID = &STR() THEN + SET OUTDD = &SYSUID..SUPERC.LIST END ELSE IF &SUBSTR(1:1,&OUTDD) = . THEN + SET &OUTDD = &STR(&UID..&OUTDD) CONTROL NOMSG FREE DA('&OUTDD') ERROR + DO ERROR OFF SET &PO = &SUBSTR(&LENGTH(&OUTDD)-1:&LENGTH(&OUTDD)-1,&OUTDD) IF &PO = ) THEN + SET &DIRM = &STR(DIR(5) DSORG(PO)) ELSE + SET &DIRM = &STR(RELEASE DSORG(PS)) ALLOC FI(OUTDD) DA('&OUTDD') SPACE (50 100) BLKSIZE(3325) + REUSE NEW &DIRM IF &LASTCC = 0 THEN + GOTO SYSIN1 ELSE + DO WRITE ** INVALID DATASET NAME/MEMBER OR BUSY: &OUTDD IF &FIRST = THEN + DO SET &FIRST = DONE IF &UID ^= &STR() THEN + DO WRITE + USE FULLY QUALIFIED DATASET NAME WITHOUT QUOTES OR "." + FOR USER PREFIX. WRITE + * EXAMPLE: &UID..SUPERC.LIST AND .SUPERC.LIST + ARE EQUIVALENT. END ELSE WRITE + * USE FULLY QUALIFIED NAME WITHOUT QUOTES. END SET &OUTDD = WRITENR LISTING FILE :&STR() READ SET &OUTDD = &SYSDVAL IF &STR('&OUTDD') = 'EXIT' | &STR('&OUTDD') = '' THEN + GOTO EXIT ELSE + GOTO OUTDD1 END END ALLOC FI(OUTDD) DA('&OUTDD') OLD REUSE /* ALLOC. AS OLD.*/ /*************************************************************/ /* STATEMENTS (SYSIN) DATA SET. */ /*************************************************************/ ERROR OFF SYSIN1: + IF &STR(&SYSIN) ^= DUMMY THEN + DO IF &STR(&SYSIN) ^= &STR(PROMPT) THEN + DO /*********************************************************/ /* SYSIN DSN ERROR RECOVERY. */ /*********************************************************/ ERROR + DO WRITE ** INVALID DATASET NAME/MEMBER OR BUSY: &SYSIN IF &FIRST = THEN + DO SET &FIRST = DONE IF &UID ^= &STR() THEN + DO WRITE + USE FULLY QUALIFIED DATASET NAME WITHOUT QUOTES OR "." + FOR USER PREFIX. WRITE + * EXAMPLE: &UID..SUPERC.STMTS AND .SUPERC.STMTS + ARE EQUIVALENT. END ELSE WRITE + * USE FULLY QUALIFIED NAME WITHOUT QUOTES. END SET &SYSIN = ERROR OFF WRITENR SYSIN FILE :&STR() READ SET &SYSIN = &SYSDVAL IF &STR('&SYSIN') = 'EXIT' | &STR('&SYSIN') = '' THEN + GOTO EXIT ELSE + GOTO SYSIN1 /* RECYCLE FOR ERROR CASE */ END CONT3: + IF &SUBSTR(1:1,&SYSIN) = . THEN + SET &SYSIN = &STR(&UID..&SYSIN) CONTROL NOMSG /*********************************************************/ /* VERIFICATION/ALLOCATION OF SYSIN DSN. */ /*********************************************************/ ALLOC FI(SYSIN) DA('&SYSIN') SHR REUSE ALLOC FI(ISRS) DA('&SYSIN') SHR REUSE OPENFILE ISRS CLOSFILE ISRS FREE FI(ISRS) ERROR OFF CONTROL NOMSG END ELSE + DO /*********************************************************/ /* PROMPT FOR PROCESS STATEMENTS. */ /*********************************************************/ SET SYSIN = &UID..SUPERC.STMTS IF &UID = &STR() THEN + SET SYSIN = &SYSUID..SUPERC.STMTS CONTROL NOMSG DELETE '&SYSIN' CONTROL MSG ALLOC FI(SYSIN) DA('&SYSIN') SPACE (5 5) REUSE NEW + RECFM(F,B) LRECL(80) BLKSIZE(1600) CONTROL NOMSG SET &TSYSIN = &SYSIN OPENFILE SYSIN OUTPUT IF &CTYPE = SRCH THEN + DO WRITE ENTER SRCHFOR AND ANY OTHER PROCESS STATEMENTS WRITE SRCHFOR STATEMENT FORMAT: SRCHFOR + SEARCH-PATTERN-IN-QUOTES END ELSE + DO WRITE + PROCESS STATEMENT FORMAT: (COMPARE TYPE) EXAMPLES: WRITE &STR( ) + CMPCOLM START-COLM:STOP-COLM ... (L,W) + CMPCOLM 1:60 75:90 WRITE &STR( ) + LSTCOLM START-COLM:STOP-COLM (L ) LSTCOLM 1:75 WRITE &STR( ) + DPLINE 'STRING',START-POSITION (L,W) + DPLINE 'PAGE ',87 WRITE &STR( ) + OR, START-RANGE + DPLINE 'PAGE ',87:95 WRITE &STR( ) + OR ENTIRE LINE DPLINE 'PAGE ' WRITE &STR( ) + SELECT MEMBER, ... (ALL) + SELECT MEM1,NMEM2:OMEM2 WRITE &STR( ) + LNCT NNNNNN (ALL) LNCT 999 WRITE &STR( ) + OTHERS: NTITLE (ALL) OTITLE (ALL) CMPLINE (L,W) + CMPLNUM (L,W) WRITE &STR( ) + CMPBOFS (B ) CMPCOLMN (L,W) CMPCOLMO (L,W) + DPLINEC (L,W) WRITE &STR( ) + NCHGT (L,W) OCHGT (L,W) SLIST (ALL) + * AND .* (ALL) WRITE WRITE ENTER CONTROL STATEMENTS. END WRITENR &STR( : ) SET &SYSDVAL = READ DO WHILE &STR(&SYSDVAL) ^= &STR() && + &STR(&SYSDVAL) ^= &STR(/*) SET &SYSIN = &STR(&SYSDVAL. ) IF &STR('&SYSIN') = &STR('CANCEL') THEN + DO CLOSFILE SYSIN GOTO EXIT END PUTFILE SYSIN WRITENR &STR( : ) READ END CLOSFILE SYSIN SET &SYSINU = U /* INDICATE SYSIN USED */ SET &SYSIN = &TSYSIN /* RESTORE SYSIN NAME */ END END ELSE + DO CONTROL NOMSG FREE FILE(SYSIN) CONTROL NOMSG END /*************************************************************/ /* UPDATE FILE SECTION. */ /*************************************************************/ DELDD1: + IF &DELDD = DUMMY THEN + DO SET DELDD = &UID..SUPERC.UPDATE IF &UID = &STR() THEN + SET DELDD = &SYSUID..SUPERC.UPDATE END ELSE IF &SUBSTR(1:1,&DELDD) = . THEN + SET &DELDD = &STR(&UID.&DELDD) CONTROL NOMSG FREE DA('&DELDD') ERROR + DO ERROR OFF /* CHECK FOR PO DATASET SPECIFICATION SET &PO=&SUBSTR(&LENGTH(&DELDD)-1:&LENGTH(&DELDD)-1,&DELDD) IF &PO = ) THEN + SET &DIRM = DIR(5) ELSE + SET &DIRM = &STR(RELEASE DSORG(PS)) ALLOC FI(DELDD) DA('&DELDD') SPACE (15 30) BLKSIZE(1600) + REUSE NEW &DIRM IF &LASTCC = 0 THEN + GOTO INVOKE1 ELSE + DO WRITE ** INVALID DATASET NAME/MEMBER OR BUSY: &DELDD IF &FIRST = THEN + DO SET &FIRST = DONE IF &UID ^= &STR() THEN + DO WRITE + USE FULLY QUALIFIED DATASET NAME WITHOUT QUOTES OR "." + FOR USER PREFIX. WRITE + * EXAMPLE: &UID..SUPERC.UPDATE AND .SUPERC.UPDATE + ARE EQUIVALENT. END ELSE WRITE + * USE FULLY QUALIFIED NAME WITHOUT QUOTES. END SET &DELDD = WRITENR UPDATE FILE :&STR() READ SET &DELDD = &SYSDVAL IF &STR('&DELDD') = 'EXIT' | &STR('&DELDD') = '' THEN + GOTO EXIT ELSE + GOTO DELDD1 END END ALLOC FI(DELDD) DA('&DELDD') OLD REUSE /* ALLOC. OLD. */ INVOKE1: + ERROR OFF /*************************************************************/ /* INVOKE SUPERC. */ /*************************************************************/ WRITE *** SUPERC INVOKED IF &LISTING ^= OVSUM && &LISTING ^= DELTA && + &LISTING ^= LONG && &LISTING ^= CHNG && + &LISTING ^= NOLIST THEN + SET LISTING = DELTA IF &SYSISPF = ACTIVE && &PLIB = THEN + DO /**********************************************************/ /* ASSUME ISPF IS ACTIVE AND USER DOESN'T HAVE SUPERC IN */ /* A PRIVATE LIBRARY. */ /**********************************************************/ ISPEXEC SELECT PGM(ISRSUPC) + PARM(&LISTING.L,&CTYPE.CMP,&PROCESS.) SET &RETCC = &LASTCC END ELSE + DO /**********************************************************/ /* OUTSIDE OF ISPF AND/OR PRIVATE SUPERC LOAD LIBRARY USE */ /* "CALL" INSTEAD OF "ISPEXEC SELECT." */ /**********************************************************/ CALL '&LIB' '&LISTING.L,&CTYPE.CMP,&PROCESS.' SET &RETCC = &LASTCC END WRITE *** SUPERC RETURN CODE = &RETCC *** CONTROL NOMSG FREE DA('&OUTDD') FREE FI(NEWDD OLDDD DELDD OUTDD ISRS) /*************************************************************/ /* BROWSE LISTING (IF IN ISPF INVIRONMENT) */ /* ASSUMES TO E/ R2 OR BETTER SYSTEM. */ /*************************************************************/ IF &SYSISPF = ACTIVE THEN + DO IF &EDIT = EDIT | &STR(&MACRO.) ^= &STR() THEN + ISPEXEC EDIT DATASET('&OUTDD') MACRO(&MACRO) ELSE DO IF &BROWSE = BROWSE THEN + ISPEXEC BROWSE DATASET('&OUTDD') END END EXIT: + EXIT CODE(&RETCC)