Return to Mainframe Utilities Page
Module
/********************************************************************** /* CLIST: PRINTIT * /* AUTHOR: DAVID LEIGH * /* FUNCTION: THIS CLIST CONTROLS AN CLIST/ISPF DIALOG TO ENABLE * /* PRINTING OF DATASETS TO MULTIPLE LOCATIONS AND IN * /* MULTIPLE FORMATS. IT MAY BE EXECUTED AS A CLIST OR AS AN* /* EDIT MACRO. A COMPANION CLIST, "$PRINTIT" EXISTS * /* SPECIFICALLY FOR THE DSLIST ENVIRONMENT. * /********************************************************************** PROC 0 PRNTPFX(SYST.ISPF) /* POINT TO AN ISPF SET OF LIBRARIES */ + PCOPIES(0) /* DEFAULT "OVERRIDE" VALUE FOR EACH CONFIGURATION*/ + PDSN() /* THE INPUT DATASET IF ANY */ + CONFIG() /* PRINT CONFIGURATION NAME FOR BATCH EXECUTION */ + GOTOSEC(REDISPLAY) /* INITIALIZE "VERIFY" SECTION GOTO LABEL */ + HLDCLASS(X) /* DEFAULT HOLD CLASS */ + DFLTCLAS(X) /* DEFAULT PRINT CLASS */ + DFLTDEST(LOCAL) /* DEFAULT PRINT DESTINATION */ + DFLTPORT(81) /* INDICATE =< LRECL FOR PORTRAIT DEFAULT */ + BATCHCC(0) /* INITIALIZE THE BATCH RETURN CODE TO ZERO */ + JCLREVEW(N) /* INITIALIZE THE JCL REVIEW VALUE TO "NO" */ + TIMEA('0,15') /* CPU TIME SETTING FOR JOB CLASS "A" */ + TIMEB('5,00') /* CPU TIME SETTING FOR JOB CLASS "B" */ + TIMEC('5,00') /* CPU TIME SETTING FOR JOB CLASS "C" */ + TIMED('5,00') /* CPU TIME SETTING FOR JOB CLASS "D" */ + TIMEV('0,05') /* CPU TIME SETTING FOR JOB CLASS "V" */ + TIME1('1,00') /* CPU TIME SETTING FOR JOB CLASS "1" */ + TIME4('0,15') /* CPU TIME SETTING FOR JOB CLASS "4" */ + TIME5('5,00') /* CPU TIME SETTING FOR JOB CLASS "5" */ + ADMIN('MATT BRINKMAN 402-458-2258') /* CURRENT PRINTIT ADMIN */ + ADMINID('P@UMJB') /* ADMINISTRATOR'S TSO ID */ + BATCH /* INDICATE NON-INTERACTIVE EXECUTION */ + HELP /* DISPLAY HELP INSTEAD OF PROCESSING */ + DEBUG /* SHOW DEBUGGING MESSAGAS DURING EXECUTION */ CONTROL NOMSG NOLIST NOFLUSH NOPROMPT /********************************************************************** /* CONTROL CLIST/EDIT MODE PROCESSING * /********************************************************************** ERROR DO SET MODE = CLIST RETURN END ISREDIT MACRO (OPT1 OPT2) ERROR OFF /********************************************************************** /* LOG THE USE * /********************************************************************** /********************************************************************** /* CONTROL DEBUG PROCESSING * /********************************************************************** ISPEXEC CONTROL ERRORS RETURN IF &DEBUG = DEBUG OR &OPT1 = DEBUG OR &OPT2 = DEBUG THEN + CONTROL MSG LIST CONLIST SYMLIST NOFLUSH ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT IF &HELP = HELP OR &OPT1 = HELP OR &OPT2 = HELP THEN GOTO HELPSEC /********************************************************************** /* ESTABLISH SOME VARIABLES * /********************************************************************** ISPEXEC SELECT PGM(USERINFO) PARM(&SYSUID) /* CALL 'SYS2.USC1.LINKLIB(USERINFO)' '&SYSUID ' ISPEXEC VGET (PACODE PSLOC CCNTR BINNM) SET PACODE = &STR(&CCNTR) SET PSLOC = &STR(&BINNM) ISPEXEC VPUT (PACODE PSLOC) SET LP = &STR(( SET RP = &STR()) /*********************************************************************** /* OPEN PRINTIT TABLE * /*********************************************************************** ISPEXEC TBOPEN PRINTIT NOWRITE SET OPENCC = &LASTCC SELECT (&OPENCC) WHEN (8) DO ISPEXEC TBCREATE PRINTIT KEYS(PTCONNAM) + NAMES(PTBURST PTCHARS PTCKPTLN PTCKPTPA PTCKPTSE + PTCLASS PTCOMPCT PTCONTRL PTCOPIES PTDATACK + PTDEFALT PTDEST PTDPAGLB PTFCB PTFLASH + PTFORMS PTFRMDEF PTGRPID PTINDEX PTJESDS + PTLINDEX PTLINECT PTMODIFY PTPAGEDF PTPIMSG + PTPRMODE PTPRTY PTSYSARA PTTHRHLD PTTRC PTUCS + PTWRITER PTDESC PTSEL PTSKEL01 PTTAIL01 + PTOPT01 PTSKEL02 PTTAIL02 PTOPT02 PTSKEL03 + PTTAIL03 PTOPT03 PTSKEL04 PTTAIL04 PTOPT04 + PTSKEL05 PTTAIL05 PTOPT05 PTSKEL06 PTTAIL06 + PTOPT06 PTSKEL07 PTTAIL07 PTOPT07 PTSKEL08 + PTTAIL08 PTOPT08 PTSKEL09 PTTAIL09 PTOPT09 + PTSKEL10 PTTAIL10 PTOPT10 PTSKEL11 PTTAIL11 + PTOPT11 PTSKEL12 PTTAIL12 PTOPT12 PTSKEL13 + PTTAIL13 PTOPT13) ISPEXEC TBVCLEAR PRINTIT SET PTCONNAM = DEFAULT SET PTDEST = &STR(&DFLTDEST) SET PTCLASS = &STR(&DFLTCLAS) SET PTCOPIES = 1 SET PTDESC = &STR(DEST=&DFLTDEST AND SYSOUT CLASS=&DFLTCLAS) SET PTSKEL01 = PRINTIT1 SET PTTAIL01 = Y SET PTOPT01 = N SET PTSKEL02 = PRINTIT2 SET PTTAIL02 = Y SET PTOPT02 = N SET PTSKEL03 = PRINTIT3 SET PTTAIL03 = Y SET PTOPT03 = N SET PTSKEL04 = PRINTPDS SET PTTAIL04 = Y SET PTOPT04 = N SET PTSKEL05 = PRINTIT4 SET PTTAIL05 = Y SET PTOPT05 = N ISPEXEC TBADD PRINTIT ISPEXEC TBCLOSE PRINTIT REPLCOPY ISPEXEC TBVCLEAR PRINTIT ISPEXEC TBOPEN PRINTIT NOWRITE END WHEN (12) DO ISPEXEC TBSTATS PRINTIT STATUS2(TABSTAT) IF &STR(&TABSTAT) = 1 OR &STR(&TABSTAT) = 2 THEN + GOTO OPEN_CONTINUE SET ZEDLMSG = &STR(ATTEMPTING TO ACCESS THE PRINTIT ISPF TABLE) ISPEXEC CONTROL DISPLAY LOCK ISPEXEC DISPLAY MSG(UTLZ001W) ISPEXEC TBOPEN PRINTIT NOWRITE SET OPENCC = &LASTCC DO &I = 1 TO 30 WHILE &OPENCC ¬= 0 ISPEXEC TBOPEN PRINTIT NOWRITE SET OPENCC = &LASTCC END IF &OPENCC ¬= 0 THEN + DO SET ZEDLMSG = &STR(UNABLE TO ACCESS PRINTIT ISPF + TABLE. PLEASE TRY LATER) ISPEXEC SETMSG MSG(UTLZ001) EXIT CODE(12) END END WHEN (16 ¦ 20) DO SET ZELDMSG = &STR(SEVERE ERROR ATTEMPTING TO ACCESS PRINTIT + ISPF TABLE. NOTIFY TECH SUPPORT) ISPEXEC SETMSG MSG(UTLZ001) EXIT CODE(16) END END /*********************************************************************** /* GET THE DATASET INFORMATION IF THIS IS EXECUTED AS A MACRO * /*********************************************************************** OPEN_CONTINUE: + IF &MODE ¬= CLIST THEN + DO ISREDIT (LN,CL) = CURSOR /* IF &OPT1 ¬= PACKED AND &OPT2 ¬= PACKED THEN + /* DO /* ISREDIT (PACK) = PACK /* IF &PACK = ON THEN + /* DO /* SET ZEDSMSG = &STR(DATA IS PACKED) /* SET ZEDLMSG = &STR(SPECIFY "PRINTIT PACKED" OR + /* UNPACK THE DATA AND SAVE + /* THE DATASET FIRST) /* ISPEXEC SETMSG MSG(UTLZ001) /* SET BATCHCC = 12 /* GOTO FINISH /* END /* END IF &CL = 0 THEN + DO ISREDIT (PDSN) = DATASET ISREDIT (MBR) = MEMBER IF &STR(&MBR) > THEN SET PDSN = &STR(&PDSN(&MBR)) END ELSE + DO ISREDIT (LN,CL) = CURSOR ISREDIT (PDSN) = LINE .ZCSR SET SYSDVAL = &SUBSTR(&CL:+ &LENGTH(&NRSTR(&PDSN)),&NRSTR(&PDSN)) READDVAL PDSN SET X = &LENGTH(&STR(&PDSN)) SET Y = &SYSINDEX(&STR(&LP&RP),&STR(&PDSN)) DO WHILE + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(.) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(?) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(") OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(') OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(:) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(;) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(&&) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(~) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(`) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(|) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(%) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(ª) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(*) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(_) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(-) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(=) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(+) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(!) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(?) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(?) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR() OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR({) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(}) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(/) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(>) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(<) OR + &SUBSTR(&X:&X,&STR(&PDSN)) = &STR(&LP) OR + &SUBSTR(&X-1:&X,&STR(&PDSN)) = &STR(&RP&RP) OR + &SUBSTR(&X-1:&X,&STR(&PDSN)) = &STR(&LP&RP) OR + &SUBSTR(&X-1:&X,&STR(&PDSN)) = &STR('&RP) OR + &SUBSTR(&X-1:&X,&STR(&PDSN)) = &STR(&RP&LP) OR + (&SUBSTR(&X:&X,&STR(&PDSN)) = &STR(&RP) AND + (&SYSINDEX(&STR(&LP),&STR(&PDSN)) = 0) SET X = &X - 1 END SET PDSN = &SUBSTR(1:&X,&STR(&PDSN)) IF &Y > 0 THEN SET PDSN = &STR(&PDSN&LP.0&RP) END END /*********************************************************************** /* IF A DATASET EXISTS, ATTEMPT TO GET THE LRECL AND RECFM * /*********************************************************************** IF &STR(&PDSN) > AND &BATCH ¬= BATCH THEN + DO LISTDSI '&PDSN' IF &LASTCC = 0 THEN + DO SET PCC = &SUBSTR(&LENGTH(&STR(&SYSRECFM)),+ &STR(&SYSRECFM)) IF &PCC ¬= A AND &PCC ¬= M THEN SET PCC = ISPEXEC VGET (PTITPORT PTITLAND) PROFILE IF &SYSLRECL <= &DFLTPORT THEN SET PTCONNAM = &PTITPORT ELSE SET PTCONNAM = &PTITLAND ISPEXEC TBGET PRINTIT IF &LASTCC = 0 THEN + DO SET PTSEL = S ISPEXEC TBMOD PRINTIT END END END /*********************************************************************** /* GO RIGHT TO PRINT IF BATCH PROCESSING * /*********************************************************************** IF &BATCH = BATCH THEN GOTO PRINT_SECTION /*********************************************************************** /* REDISPLAY LIST SCREEN * /*********************************************************************** ISPEXEC VGET PPGMNAME CONTROL END(ENDO) IF &STR(&PPGMNAME) = THEN + DO SET SYSOUTTRAP = 1000 ACF LIST * END SET SYSOUTTRAP = 0 SET SYSDVAL = &STR(&SYSNSUB(1,&SYSOUTLINE1)) READDVAL X Y N A M E S SET PPGMNAME = &STR(&N &A &M &E &S) ENDO CONTROL END(END) IF &STR(&PDSN) > THEN + SET ZEDLMSG = &STR(TYPE "S" NEXT TO DESIRED PRINT CONFIGURATION+ (S) AND PRESS TO PRINT.) ELSE + SET ZEDLMSG = &STR(ENTER DSN && "S" NEXT TO DESIRED PRINT + CONFIGURATION(S) && PRESS TO PRINT.) ISPEXEC SETMSG MSG(UTLZ000) REDISPLAY: + SET ZTDMARK = &STR(*** END OF CURRENT PRINT CONFIGURATIONS ***) ISPEXEC TBDISPL PRINTIT PANEL(PRINTIT) SET PANELCC = &LASTCC /* IF &STR(&PDSN) > THEN + /* SET ZEDLMSG = &STR(TYPE "S" NEXT TO DESIRED PRINT CONFIGURATION+ /* (S) AND PRESS TO PRINT.) /* ELSE + /* SET ZEDLMSG = &STR(ENTER DSN && "S" NEXT TO DESIRED PRINT + /* CONFIGURATION(S) && PRESS TO PRINT.) /********************************************************************** /* HANDLE MEMBER GROUP HELP FIRST * /********************************************************************** IF &STR(&PMBR) = &STR(?) THEN + DO SET PMBR = ISPEXEC SELECT PGM(ISPTUTOR) PARM(UTILH107) GOTO REDISPLAY END /********************************************************************** /* PROCESS LINE COMMANDS NEXT * /********************************************************************** IF &ZTDSELS ¬= &STR(0000) THEN + DO ISPEXEC CONTROL DISPLAY SAVE DO WHILE &ZTDSELS ¬= &STR(0000) SELECT (&PTSEL) /************ ADD A NEW ROW *************/ WHEN (A) DO IF &STR(&SYSUID) ¬= &STR(&ADMINID) THEN + DO SET ZEDLMSG = &STR(TO ADD A TABLE ROW + PLEASE CONTACT + &ADMIN) ISPEXEC SETMSG MSG(UTLZ001W) GOTO NEXT_LINE END ISPEXEC TBVCLEAR PRINTIT SET PTCANCEL = NO SET PTSKEL01 = PRINTIT1 SET PTTAIL01 = Y SET PTOPT01 = N SET PTSKEL02 = PRINTIT2 SET PTTAIL02 = Y SET PTOPT02 = N SET PTSKEL03 = PRINTIT3 SET PTTAIL03 = Y SET PTOPT03 = N SET PTSKEL04 = PRINTIT4 SET PTTAIL04 = Y SET PTOPT04 = N SET RETURN = &STR(ADD_CONTINUE) GOTO CONFIG_LOOP SET PTSEL = ADD_CONTINUE: IF &PTCANCEL = NO THEN + DO ISPEXEC TBEND PRINTIT IF &ZTDSELS > 0001 THEN + DO SET ZEDLMSG = &STR(AN + "UPDATE-TYPE" + LINE COMMAND + PRECLUDED THE + PROCESSING OF + YOUR SUBSEQUENT + LINE COMMANDS) ISPEXEC SETMSG MSG(UTLZ001) END SET ZTDSELS = &STR(0000) ISPEXEC LIBDEF ISPTABL + DATASET ID('&PRNTPFX..ISPTLIB') ISPEXEC TBOPEN PRINTIT WRITE SET OPENCC = &LASTCC DO &I = 1 TO 30 WHILE &OPENCC ¬= 0 ISPEXEC TBOPEN PRINTIT WRITE SET OPENCC = &LASTCC END IF &OPENCC = 0 THEN + DO ISPEXEC TBADD PRINTIT ORDER ISPEXEC TBSORT PRINTIT + FIELDS(PTCONNAM,C,A) ISPEXEC TBCLOSE PRINTIT ISPEXEC TBOPEN PRINTIT NOWRITE /***** NOTIFY OF NEW ROWS *****/ SEND '&STR(*** &SYSUID ADDED A ROW TO PRINTIT ***)' U(P@UMJB) LOGON END ELSE + DO SET ZEDLMSG = &STR(UNABLE TO OPEN + THE PRINTIT + ISPF TABLE FOR + UPDATE. PLEASE + TRY LATER.) ISPEXEC SETMSG MSG(UTLZ001W) END END ELSE + DO SET ZEDLMSG = &STR("CANCEL" ISSUED, NO + NEW PRINT CONFIGURATION + WAS ADDED.) ISPEXEC SETMSG MSG(UTLZ000W) END END /******** CHANGE A ROW *********/ WHEN (C) DO IF &STR(&SYSUID) ¬= &STR(&ADMINID) THEN + DO SET ZEDLMSG = &STR(TO CHANGE A TABLE ROW + PLEASE CONTACT + &ADMIN) ISPEXEC SETMSG MSG(UTLZ001W) GOTO NEXT_LINE END SET PTCANCEL = NO SET RETURN = &STR(CHANGE_CONTINUE) GOTO CONFIG_LOOP CHANGE_CONTINUE: SET PTSEL = IF &PTCANCEL = NO THEN + DO ISPEXEC TBEND PRINTIT IF &ZTDSELS > 0001 THEN + DO SET ZEDLMSG = &STR(AN + "UPDATE-TYPE" + LINE COMMAND + PRECLUDED THE + PROCESSING OF + YOUR SUBSEQUENT + LINE COMMANDS) ISPEXEC SETMSG MSG(UTLZ001) END SET ZTDSELS = &STR(0000) ISPEXEC LIBDEF ISPTABL + DATASET ID('&PRNTPFX..ISPTLIB') ISPEXEC TBOPEN PRINTIT WRITE SET OPENCC = &LASTCC DO &I = 1 TO 30 WHILE &OPENCC ¬= 0 ISPEXEC TBOPEN PRINTIT WRITE SET OPENCC = &LASTCC END IF &OPENCC = 0 THEN + DO ISPEXEC TBMOD PRINTIT /***** NOTIFY OF NEW ROWS *****/ SEND '&STR(*** &SYSUID MODDED PRINTIT ROW 2 ***)' U(P@UMJB) LOGON ISPEXEC TBSORT PRINTIT + FIELDS(PTCONNAM,C,A) ISPEXEC TBCLOSE PRINTIT ISPEXEC TBOPEN PRINTIT NOWRITE END ELSE + DO SET ZEDLMSG = &STR(UNABLE TO OPEN + THE PRINTIT + ISPF TABLE FOR + UPDATE. PLEASE + TRY LATER.) ISPEXEC SETMSG MSG(UTLZ001W) END END ELSE + DO SET ZEDLMSG = &STR("CANCEL" ISSUED, NO + PRINT CONFIGURATION + WAS CHANGED.) ISPEXEC SETMSG MSG(UTLZ000W) END END /******** DELETE A ROW *********/ WHEN (D) DO IF &STR(&SYSUID) ¬= &STR(&ADMINID) THEN + DO SET ZEDLMSG = &STR(TO DELETE A TABLE ROW + PLEASE CONTACT + &ADMIN) ISPEXEC SETMSG MSG(UTLZ001W) GOTO NEXT_LINE END ISPEXEC SELECT CMD(%YOUSURE COLUMN(26) ROW(1)) IF &LASTCC > 0 THEN GOTO NEXT_LINE SET PTSEL = ISPEXEC TBEND PRINTIT IF &ZTDSELS > 0001 THEN + DO SET ZEDLMSG = &STR(AN "UPDATE-TYPE" LINE + COMMAND PRECLUDED THE + PROCESSING OF YOUR + SUBSEQUENT LINE + COMMANDS) ISPEXEC SETMSG MSG(UTLZ001) END SET ZTDSELS = &STR(0000) ISPEXEC LIBDEF ISPTABL + DATASET ID('&PRNTPFX..ISPTLIB') ISPEXEC TBOPEN PRINTIT WRITE SET OPENCC = &LASTCC DO &I = 1 TO 30 WHILE &OPENCC ¬= 0 ISPEXEC TBOPEN PRINTIT WRITE SET OPENCC = &LASTCC END IF &OPENCC = 0 THEN + DO ISPEXEC TBGET PRINTIT ISPEXEC TBDELETE PRINTIT ISPEXEC TBCLOSE PRINTIT ISPEXEC TBOPEN PRINTIT NOWRITE END ELSE + DO SET ZEDLMSG = &STR(UNABLE TO OPEN THE + PRINTIT ISPF TABLE + FOR UPDATE. PLEASE + TRY LATER.) ISPEXEC SETMSG MSG(UTLZ001W) END END /******** CHECK SDSF FOR JOBS IN THIS CLASS ********/ WHEN (J) DO ISPEXEC TBSKIP PRINTIT NUMBER(0) NOREAD + POSITION(CRP) ISPEXEC TBVCLEAR PRINTIT SET PTSEL = S ISPEXEC TBTOP PRINTIT ISPEXEC TBSCAN PRINTIT ARGLIST(PTSEL) CONDLIST(EQ) IF &LASTCC = 0 THEN + DO ISPEXEC TBSKIP PRINTIT NUMBER(0) NOREAD + POSITION(CRP2) IF &CRP = &CRP2 THEN + DO SET PTSEL = ISPEXEC TBMOD PRINTIT /***** NOTIFY OF NEW ROWS *****/ SEND '&STR(*** &SYSUID MODDED PRINTIT ROW 3 ***)' U(P@UMJB) LOGON END END ISPEXEC TBTOP PRINTIT ISPEXEC TBSKIP PRINTIT NUMBER(&CRP) ISPEXEC SELECT CMD(%PRINTQ &PTCLASS) END /******** CHECK THE VPS QUEUE FOR VPS PRINTERS ******/ WHEN (Q) DO ISPEXEC SELECT PGM(VM60ISPF) NEWAPPL(VMCF) + NOCHECK PARM(2) END WHEN (S) DO PRINT_SECTION: SET GOTOSEC = &STR(PRINT) GOTO VERIFY PRINT: ISPEXEC VGET PJOBCLAS PROFILE SET TIME = &STR(&&)&STR(TIME&PJOBCLAS) SET TIME = &TIME IF &JCLREVEW = Y THEN + DO DELETE '&SYSUID..TEMP.PRINTIT.JCL' FREE DDNAME(ISPFILE TEMPDD) ALLOCATE DDNAME(TEMPDD) + DSN('&SYSUID..TEMP.PRINTIT.JCL') + NEW CATALOG + UNIT(SYSDA) VOLUME(WRK$$$) + SPACE(1,1) + TRACKS RELEASE DSORG(PS) + RECFM(F B) LRECL(80) BLKSIZE(23440) FREE DDNAME(TEMPDD) ALLOCATE DDNAME(ISPFILE) + DSN('&SYSUID..TEMP.PRINTIT.JCL') + OLD ISPEXEC FTOPEN ISPEXEC FTINCL PRINTIT SET SAVECC = &LASTCC ISPEXEC FTCLOSE FREE DDNAME(ISPFILE) IF &SAVECC > 0 THEN + DO SET ZEDLMSG = &STR(JCL CREATION + FAILED WITH A + RETURN CODE OF + "&SAVECC") ISPEXEC SETMSG MSG(UTLZ001W) END ELSE + DO SET ZEDLMSG = &STR(YOU MUST SUBMIT + THIS JCL + YOURSELF) ISPEXEC SETMSG MSG(UTLZ001W) ISPEXEC EDIT + DATASET('&SYSUID..TEMP.PRINTIT.JCL') END END ELSE + DO ISPEXEC FTOPEN TEMP ISPEXEC FTINCL PRINTIT SET SAVECC = &LASTCC ISPEXEC FTCLOSE IF &SAVECC > 0 THEN + DO SET ZEDLMSG = &STR(JCL CREATION + FAILED WITH A + RETURN CODE OF + "&SAVECC") ISPEXEC SETMSG MSG(UTLZ001W) END ELSE + DO ISPEXEC VGET ZTEMPF SET ZEDLMSG = &STR(PRINT JOB + SUBMITTED) ISPEXEC SETMSG MSG(UTLZ000) SUBMIT '&ZTEMPF' END END IF &STR(&ZTDSELS) = &STR(0000) OR + &STR(&ZTDSELS) = THEN + IF &BATCH = BATCH THEN GOTO FINISH ELSE GOTO CONTINUE END WHEN (L) DO SET PTSEL = SET PTITLAND = &STR(&PTCONNAM) ISPEXEC VPUT PTITLAND PROFILE SET ZEDLMSG = &STR("LANDSCAPE" PROFILE SET TO + "&PTCONNAM") ISPEXEC SETMSG MSG(UTLZ000W) END WHEN (P) DO SET PTSEL = SET PTITPORT = &STR(&PTCONNAM) ISPEXEC VPUT PTITPORT PROFILE SET ZEDLMSG = &STR("PORTRAIT" PROFILE SET TO + "&PTCONNAM") ISPEXEC SETMSG MSG(UTLZ000W) END /****** VIEW AN EXISTING PRINT CONFIGURATION *******/ WHEN (V) DO SET SKELOPT = N VIEW_LOOP: ISPEXEC DISPLAY PANEL(PRINTIT2) IF &LASTCC < 8 THEN + DO IF &STR(&SKELOPT) = Y THEN + DO SET SKELOPT = N VIEW_LOOP_2: ISPEXEC DISPLAY PANEL(PRINTIT1) IF &LASTCC < 8 THEN GOTO VIEW_LOOP_2 END GOTO VIEW_LOOP END SET PTSEL = ISPEXEC TBMOD PRINTIT END WHEN ( ) ISPEXEC TBMOD PRINTIT OTHERWISE DO LINE_COMMANDS: ISPEXEC TBEND PRNTCMDS ISPEXEC TBCREATE PRNTCMDS NOWRITE REPLACE KEYS() + NAMES(PTCMD PTCMDDES) SET PTCMD = &STR(A) SET PTCMDDES = + &STR(ADD A NEW PRINT CONFIGURATION. ) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(C) SET PTCMDDES = + &STR(CHANGE AN EXISTING PRINT CONFIGURATION ) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(D) SET PTCMDDES = + &STR(DELETE AN EXISTING PRINT CONFIGURATION ) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(J) SET PTCMDDES = + &STR(CHECK SDSF FOR JOBS USING THIS OUTPUT CLASS ) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(L) SET PTCMDDES = + &STR(INDICATE WHICH PRINT CONFIGURATION YOU WOULD LIKE TO ) ISPEXEC TBADD PRNTCMDS SET PTCMD = SET PTCMDDES = + &STR(USE AS YOUR PERSONAL "LANDSCAPE" DEFAULT PRINT ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(CONFIGURATION. THE PRESENCE OF THIS DEFAULT WILL ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(AUTOMATICALLY "PRE-SELECT" YOUR DEFAULT PRINT ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(CONFIGURATION FOR DATASETS WHICH HAVE AN "LRECL" WHICH ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(IS > &DFLTPORT) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(P) SET PTCMDDES = + &STR(INDICATE WHICH PRINT CONFIGURATION YOU WOULD LIKE TO ) ISPEXEC TBADD PRNTCMDS SET PTCMD = SET PTCMDDES = + &STR(USE AS YOUR PERSONAL "PORTRAIT" DEFAULT PRINT ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(CONFIGURATION. THE PRESENCE OF THIS DEFAULT WILL ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(AUTOMATICALLY "PRE-SELECT" YOUR DEFAULT PRINT ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(CONFIGURATION FOR DATASETS WHICH HAVE AN "LRECL" WHICH ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(IS < OR = &DFLTPORT) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(Q) SET PTCMDDES = + &STR(CHECK THE VPS QUEUE FOR ALL VPS-CONTROLLED PRINTERS ) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(S) SET PTCMDDES = + &STR("SELECT" A GIVEN PRINT CONFIGURATION&LP.S&RP AND ) ISPEXEC TBADD PRNTCMDS SET PTCMD = SET PTCMDDES = + &STR(ACTUALLY CREATE THE JCL TO PRINT IT. A "Y" OR "N" IN ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(THE "REVIEW JCL ?" FIELD WILL CONTROL WHETHER THE JOB ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(IS ACTUALLY SUBMITTED AUTOMATICALLY. ) ISPEXEC TBADD PRNTCMDS SET PTCMD = &STR(V) SET PTCMDDES = + &STR("VIEW" A GIVEN PRINT CONFIGURATION TO SEE WHAT ITS ) ISPEXEC TBADD PRNTCMDS SET PTCMD = SET PTCMDDES = + &STR(ACTUAL JES SETTINGS ARE, AND TO SEE WHAT PRINTIT JCL ) ISPEXEC TBADD PRNTCMDS SET PTCMDDES = + &STR(IT IS COMPOSED OF. ) ISPEXEC TBADD PRNTCMDS ISPEXEC TBTOP PRNTCMDS SET ZWINTTL = &STR(VALID LINE COMMANDS...PF3 TO + RETURN...PF7/8 TO SCROLL) SET ZTDMARK = &STR(*** END OF VALID LINE COMMANDS ***) ISPEXEC ADDPOP ROW(6) COLUMN(8) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ LINE_CMDLOOP: ISPEXEC TBDISPL PRNTCMDS PANEL(PRNTCMDS) IF &LASTCC = 0 THEN GOTO LINE_CMDLOOP ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ END END NEXT_LINE: IF &ZTDSELS > &STR(0001) THEN + DO ISPEXEC CONTROL DISPLAY RESTORE ISPEXEC TBDISPL PRINTIT ISPEXEC CONTROL DISPLAY SAVE END ELSE + DO SET ZTDSELS = &STR(0000) ISPEXEC CONTROL DISPLAY RESTORE IF &STR(&ZCMD) > THEN GOTO SCROLL END END END /***************************************/ /* PROCESS USERS PENDING 'END' COMMAND */ /***************************************/ IF &PANELCC = 8 THEN GOTO FINISH /********************************************************************** /* PROCESS PRINT COMMANDS NOT ASSOCIATED WITH ZTDSELS * /********************************************************************** CONTINUE: + ISPEXEC TBVCLEAR PRINTIT SET PTSEL = S ISPEXEC TBTOP PRINTIT ISPEXEC TBSCAN PRINTIT ARGLIST(PTSEL) CONDLIST(EQ) IF &LASTCC = 0 THEN + DO SET PTSEL = ISPEXEC TBMOD PRINTIT GOTO PRINT_SECTION END /*****************************/ /* MAINTAIN THE TOP OF TABLE */ /*****************************/ SCROLL: + IF &STR(&ZCMD) = THEN + DO ISPEXEC TBTOP PRINTIT ISPEXEC TBSKIP PRINTIT NUMBER(&ZTDTOP) ISPEXEC VGET (ZVERB ZSCROLLN) IF &ZVERB = &STR(UP) THEN + ISPEXEC TBSKIP PRINTIT NUMBER(-&ZSCROLLN) IF &ZVERB = &STR(DOWN) THEN + ISPEXEC TBSKIP PRINTIT NUMBER(&ZSCROLLN) END GOTO REDISPLAY /*************************************************/ /* CLOSE THE PRINTIT TABLE (SAVING THE CHANGES) */ /*************************************************/ FINISH: + ISPEXEC TBEND PRINTIT ISPEXEC LIBDEF ISPTABL IF &BATCH = BATCH AND &OPENCC ¬= 0 THEN SET BATCHCC = 12 IF &MODE ¬= CLIST THEN ISREDIT CURSOR = &LN &CL IF &BATCHCC = 0 THEN + DO SET ZEDSMSG = &STR(EXITED PRINT UTILITY) ISPEXEC SETMSG MSG(UTLZ000) END EXIT CODE(&BATCHCC) /********************************************************************** /* PROCESS CHANGES AND ADDS TO THE PRINTIT PRINT CONFIGURATION TABLE. * /********************************************************************** CONFIG_LOOP: SET SKELOPT = N ISPEXEC DISPLAY PANEL(PRINTIT2) IF &LASTCC > 7 OR &STR(&PTCANCEL) = YES THEN GOTO &RETURN IF &STR(&SKELOPT) = Y THEN + DO SET SKELOPT = N SKEL_LOOP: ISPEXEC DISPLAY PANEL(PRINTIT1) IF &LASTCC > 7 THEN GOTO CONFIG_LOOP GOTO SKEL_LOOP END SET VALCLASS = &STR(ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*$) SELECT_LOOP: SELECT WHEN (&STR(&PTCONNAM) = &STR(?)) DO ISPEXEC ADDPOP ROW(4) COLUMN(21) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTIT3) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCONNAM = GOTO SELECT_LOOP END WHEN (&STR(&PTBURST) > &STR() AND + &STR(&PTBURST) ¬= &STR(Y) AND + &STR(&PTBURST) ¬= &STR(N) AND + &STR(&PTBURST) ¬= &STR(YES) AND + &STR(&PTBURST) ¬= &STR(NO)) DO IF &STR(&PTBURST) = &STR(?) THEN + SET ZWINTTL = &STR(BURST) ELSE + SET ZWINTTL = &STR(INVALID "BURST" VALUE) ISPEXEC ADDPOP ROW(6) COLUMN(5) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTIT4) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTBURST = GOTO SELECT_LOOP END WHEN (&STR(&PTCHARS) = &STR(?)) DO IF &STR(&PTCHARS) = &STR(?) THEN + SET ZWINTTL = &STR(CHARS) ELSE + SET ZWINTTL = &STR(INVALID "CHARS" VALUE) ISPEXEC ADDPOP ROW(7) COLUMN(5) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTIT5) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCHARS = GOTO SELECT_LOOP END WHEN (&STR(&PTCKPTLN) > &STR() AND + (&PTCKPTLN < 0 OR + &PTCKPTLN > 32767)) DO IF &STR(&PTCKPTLN) = &STR(?) THEN + SET ZWINTTL = &STR(CKPTLINE) ELSE + SET ZWINTTL = &STR(INVALID "CKPTLINE" VALUE) ISPEXEC ADDPOP ROW(8) COLUMN(8) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTIT6) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCKPTLN = GOTO SELECT_LOOP END WHEN (&STR(&PTCKPTPA) > &STR() AND + (&PTCKPTPA < 1 OR + &PTCKPTPA > 32767)) DO IF &STR(&PTCKPTPA) = &STR(?) THEN + SET ZWINTTL = &STR(CKPTPAGE) ELSE + SET ZWINTTL = &STR(INVALID "CKPTPAGE" VALUE) ISPEXEC ADDPOP ROW(9) COLUMN(8) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTIT7) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCKPTPA = GOTO SELECT_LOOP END WHEN (&STR(&PTCKPTSE) > &STR() AND + (&PTCKPTSE < 1 OR + &PTCKPTSE > 32767)) DO IF &STR(&PTCKPTSE) = &STR(?) THEN + SET ZWINTTL = &STR(CKPTSEC) ELSE + SET ZWINTTL = &STR(INVALID "CKPTSEC" VALUE) ISPEXEC ADDPOP ROW(10) COLUMN(7) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTIT8) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCKPTSE = GOTO SELECT_LOOP END WHEN (&SYSINDEX(&STR(&PTCLASS),&STR(&VALCLASS)) = 0) DO IF &STR(&PTCLASS) = &STR(?) THEN + SET ZWINTTL = &STR(CLASS) ELSE + IF &STR(&PTCLASS) = THEN + SET ZWINTTL = &STR("CLASS" REQUIRED - DEFAULT SET) ELSE + SET ZWINTTL = &STR(INVALID "CLASS" VALUE) ISPEXEC ADDPOP ROW(11) COLUMN(5) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTIT9) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCLASS = &STR(&DFLTCLAS) GOTO SELECT_LOOP END WHEN (&STR(&PTCOMPCT) = &STR(?)) DO IF &STR(&PTCOMPCT) = &STR(?) THEN + SET ZWINTTL = &STR(COMPACT) ELSE + SET ZWINTTL = &STR(INVALID "COMPACT" VALUE) ISPEXEC ADDPOP ROW(12) COLUMN(7) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITA) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCOMPCT = GOTO SELECT_LOOP END WHEN (&STR(&PTCONTRL) > &STR() AND + (&STR(&PTCONTRL) ¬= &STR(PROGRAM) OR + &STR(&PTCONTRL) ¬= &STR(SINGLE) OR + &STR(&PTCONTRL) ¬= &STR(DOUBLE) OR + &STR(&PTCONTRL) ¬= &STR(TRIBLE))) DO IF &STR(&PTCONTRL) = &STR(?) THEN + SET ZWINTTL = &STR(CONTROL) ELSE + SET ZWINTTL = &STR(INVALID "CONTROL" VALUE) ISPEXEC ADDPOP ROW(2) COLUMN(7) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITB) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCONTRL = GOTO SELECT_LOOP END WHEN (&STR(&PTCOPIES) = &STR(?) OR &STR(&PTCOPIES) = &STR( )) DO IF &STR(&PTCOPIES) = &STR(?) THEN + SET ZWINTTL = &STR(COPIES) ELSE + IF &STR(&PTCOPIES) = THEN + SET ZWINTTL = &STR("COPIES" REQUIRED - DEFAULT SET) ELSE + SET ZWINTTL = &STR(INVALID "COPIES" VALUE) ISPEXEC ADDPOP ROW(3) COLUMN(6) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITC) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTCOPIES = 1 GOTO SELECT_LOOP END WHEN (&STR(&PTDATACK) > &STR() AND + (&STR(&PTDATACK) ¬= &STR(BLOCK) AND + &STR(&PTDATACK) ¬= &STR(UNBLOCK) AND + &STR(&PTDATACK) ¬= &STR(BLKCHAR) AND + &STR(&PTDATACK) ¬= &STR(BLKPOS))) DO IF &STR(&PTDATACK) = &STR(?) THEN + SET ZWINTTL = &STR(DATACK) ELSE + SET ZWINTTL = &STR(INVALID "DATACK" VALUE) ISPEXEC ADDPOP ROW(5) COLUMN(6) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITD) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTDATACK = GOTO SELECT_LOOP END WHEN (&STR(&PTDEFALT) > &STR() AND + (&STR(&PTDEFALT) ¬= &STR(Y) AND + &STR(&PTDEFALT) ¬= &STR(YES) AND + &STR(&PTDEFALT) ¬= &STR(NO) AND + &STR(&PTDEFALT) ¬= &STR(N))) DO IF &STR(&PTDEFALT) = &STR(?) THEN + SET ZWINTTL = &STR(DEFAULT) ELSE + SET ZWINTTL = &STR(INVALID "DEFAULT" VALUE) ISPEXEC ADDPOP ROW(7) COLUMN(7) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITE) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTDEFALT = GOTO SELECT_LOOP END WHEN (&STR(&PTDEST) = &STR(?) OR &STR(&PTDEST) = &STR()) DO IF &STR(&PTDEST) = &STR(?) THEN + SET ZWINTTL = &STR(DEST) ELSE + IF &STR(&PTDEST) = THEN + SET ZWINTTL = &STR("DEST" REQUIRED - DEFAULT SET) ELSE + SET ZWINTTL = &STR(INVALID "DEST" VALUE) ISPEXEC ADDPOP COLUMN(4) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITF) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTDEST = &STR(&DFLTDEST) GOTO SELECT_LOOP END WHEN (&STR(&PTDPAGLB) > &STR() AND + (&STR(&PTDPAGLB) ¬= &STR(Y) AND + &STR(&PTDPAGLB) ¬= &STR(YES) AND + &STR(&PTDPAGLB) ¬= &STR(NO) AND + &STR(&PTDPAGLB) ¬= &STR(N))) DO IF &STR(&PTPAGLB) = &STR(?) THEN + SET ZWINTTL = &STR(DPAGELBL) ELSE + SET ZWINTTL = &STR(INVALID "DPAGELBL" VALUE) ISPEXEC ADDPOP ROW(9) COLUMN(8) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITG) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTDPAGLB = GOTO SELECT_LOOP END WHEN (&STR(&PTFCB) = &STR(?)) DO IF &STR(&PTFCB) = &STR(?) THEN + SET ZWINTTL = &STR(FCB) ELSE + SET ZWINTTL = &STR(INVALID "FCB" VALUE) ISPEXEC ADDPOP ROW(11) COLUMN(3) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITH) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTFCB = GOTO SELECT_LOOP END WHEN (&STR(&PTFLASH) = &STR(?)) DO IF &STR(&PTFLASH) = &STR(?) THEN + SET ZWINTTL = &STR(FLASH) ELSE + SET ZWINTTL = &STR(INVALID "FLASH" VALUE) ISPEXEC ADDPOP ROW(8) COLUMN(5) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITI) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTFLASH = GOTO SELECT_LOOP END WHEN (&STR(&PTFRMDEF) = &STR(?)) DO IF &STR(&PTFRMDEF) = &STR(?) THEN + SET ZWINTTL = &STR(FORMDEF) ELSE + SET ZWINTTL = &STR(INVALID "FORMDEF" VALUE) ISPEXEC ADDPOP ROW(14) COLUMN(7) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITJ) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTFRMDEF = GOTO SELECT_LOOP END WHEN (&STR(&PTFORMS) = &STR(?)) DO IF &STR(&PTFORMS) = &STR(?) THEN + SET ZWINTTL = &STR(FORMS) ELSE + SET ZWINTTL = &STR(INVALID "FORMS" VALUE) ISPEXEC ADDPOP ROW(6) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITK) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTFORMS = GOTO SELECT_LOOP END WHEN (&STR(&PTGRPID) = &STR(?)) DO IF &STR(&PTGRPID) = &STR(?) THEN + SET ZWINTTL = &STR(GROUPID) ELSE + SET ZWINTTL = &STR(INVALID "GROUPID" VALUE) ISPEXEC ADDPOP ROW(7) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITL) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTGRPID = GOTO SELECT_LOOP END WHEN (&STR(&PTINDEX) > &STR() AND + (&PTINDEX < 1 OR + &PTINDEX > 31)) DO IF &STR(&PTINDEX) = &STR(?) THEN + SET ZWINTTL = &STR(INDEX) ELSE + SET ZWINTTL = &STR(INVALID "INDEX" VALUE) ISPEXEC ADDPOP ROW(8) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITM) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTINDEX = GOTO SELECT_LOOP END WHEN (&STR(&PTJESDS) > &STR() AND + (&STR(&PTJESDS) ¬= &STR(Y) AND + &STR(&PTJESDS) ¬= &STR(YES) AND + &STR(&PTJESDS) ¬= &STR(NO) AND + &STR(&PTJESDS) ¬= &STR(N))) DO IF &STR(&PTJESDS) = &STR(?) THEN + SET ZWINTTL = &STR(JESDS) ELSE + SET ZWINTTL = &STR(INVALID "JESDS" VALUE) ISPEXEC ADDPOP ROW(9) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITN) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTJESDS = GOTO SELECT_LOOP END WHEN (&STR(&PTLINDEX) > &STR() AND + (&PTLINDEX < 1 OR + &PTLINDEX > 31)) DO IF &STR(&PTLINDEX) = &STR(?) THEN + SET ZWINTTL = &STR(LINDEX) ELSE + SET ZWINTTL = &STR(INVALID "LINDEX" VALUE) ISPEXEC ADDPOP ROW(10) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITO) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTLINDEX = GOTO SELECT_LOOP END WHEN (&STR(&PTLINECT) > &STR() AND + (&PTLINECT < 0 OR + &PTLINECT > 255)) DO IF &STR(&PTLINECT) = &STR(?) THEN + SET ZWINTTL = &STR(LINECT) ELSE + SET ZWINTTL = &STR(INVALID "LINECT" VALUE) ISPEXEC ADDPOP ROW(11) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITP) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTLINECT = GOTO SELECT_LOOP END WHEN (&STR(&PTMODIFY) = &STR(?)) DO IF &STR(&PTMODIFY) = &STR(?) THEN + SET ZWINTTL = &STR(MODIFY) ELSE + SET ZWINTTL = &STR(INVALID "MODIFY" VALUE) ISPEXEC ADDPOP ROW(12) COLUMN(15) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITQ) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTMODIFY = GOTO SELECT_LOOP END WHEN (&STR(&PTPAGEDF) = &STR(?)) DO IF &STR(&PTPAGEDF) = &STR(?) THEN + SET ZWINTTL = &STR(PAGEDEF) ELSE + SET ZWINTTL = &STR(INVALID "PAGEDEF" VALUE) ISPEXEC ADDPOP ROW(13) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITR) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTPAGEDF = GOTO SELECT_LOOP END WHEN (&STR(&PTPIMSG) = &STR(?)) DO IF &STR(&PTPIMSG) = &STR(?) THEN + SET ZWINTTL = &STR(PIMSG) ELSE + SET ZWINTTL = &STR(INVALID "PIMSG" VALUE) ISPEXEC ADDPOP ROW(-1) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITS) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTPIMSG = GOTO SELECT_LOOP END WHEN (&STR(&PTPRMODE) = &STR(?)) DO IF &STR(&PTPRMODE) = &STR(?) THEN + SET ZWINTTL = &STR(PRMODE) ELSE + SET ZWINTTL = &STR(INVALID "PRMODE" VALUE) ISPEXEC ADDPOP ROW(2) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITT) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTPRMODE = GOTO SELECT_LOOP END WHEN (&STR(&PTPRTY) > &STR() AND + (&PTPRTY < 0 OR + &PTPRTY > 255)) DO IF &STR(&PTPRTY) = &STR(?) THEN + SET ZWINTTL = &STR(PRTY) ELSE + SET ZWINTTL = &STR(INVALID "PRTY" VALUE) ISPEXEC ADDPOP ROW(7) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITU) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTPRTY = GOTO SELECT_LOOP END WHEN (&STR(&PTSYSARA) = &STR(?)) DO IF &STR(&PTSYSARA) = &STR(?) THEN + SET ZWINTTL = &STR(SYSAREA) ELSE + SET ZWINTTL = &STR(INVALID "SYSAREA" VALUE) ISPEXEC ADDPOP ROW(6) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITV) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTSYSARA = GOTO SELECT_LOOP END WHEN (&STR(&PTTHRHLD) > &STR() AND + (&PTTHRHLD < 0 OR + &PTTHRHLD > 99999999)) DO IF &STR(&PTTHRHLD) = &STR(?) THEN + SET ZWINTTL = &STR(THRESHLD) ELSE + SET ZWINTTL = &STR(INVALID "THRESHLD" VALUE) ISPEXEC ADDPOP ROW(9) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITW) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTTHRHLD = GOTO SELECT_LOOP END WHEN (&STR(&PTTRC) = &STR(?)) DO IF &STR(&PTTRC) = &STR(?) THEN + SET ZWINTTL = &STR(TRC) ELSE + SET ZWINTTL = &STR(INVALID "TRC" VALUE) ISPEXEC ADDPOP ROW(7) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITX) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTTRC = GOTO SELECT_LOOP END WHEN (&STR(&PTUCS) = &STR(?)) DO IF &STR(&PTUCS) = &STR(?) THEN + SET ZWINTTL = &STR(UCS) ELSE + SET ZWINTTL = &STR(INVALID "UCS" VALUE) ISPEXEC ADDPOP ROW(10) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITY) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTUCS = GOTO SELECT_LOOP END WHEN (&STR(&PTWRITER) = &STR(?)) DO IF &STR(&PTWRITER) = &STR(?) THEN + SET ZWINTTL = &STR(WRITER) ELSE + SET ZWINTTL = &STR(INVALID "WRITER" VALUE) ISPEXEC ADDPOP ROW(13) COLUMN(37) /*PEXEC CONTROL DISPLAY SAVE /* FIXPOP */ ISPEXEC DISPLAY PANEL(PRINTITZ) ISPEXEC REMPOP /*PEXEC CONTROL DISPLAY RESTORE /* FIXPOP */ SET PTWRITER = GOTO SELECT_LOOP END END GOTO CONFIG_LOOP /********************************************************************** /* PERFORM THE DATASET VERIFICATION. 1ST, CHECK FOR RELATIVE GDG GENS.* /********************************************************************** VERIFY: + SET GEN = SET A = &SYSINDEX(&STR(&LP),&STR(&PDSN)) SET B = &SYSINDEX(&STR(&RP),&STR(&PDSN)) IF &A > 0 AND &B > 0 THEN SET GEN = &SUBSTR(&A+1:&B-1,&STR(&PDSN)) IF (&STR(&GEN) > AND + (&SYSINDEX(&STR(+),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(-),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(0),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(1),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(2),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(3),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(4),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(5),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(6),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(7),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(8),&STR(&GEN)) = 1 OR + &SYSINDEX(&STR(9),&STR(&GEN)) = 1)) THEN + DO SET ZEDLMSG = &STR(*** RESOLVING RELATIVE GDG GENERATION ***) ISPEXEC CONTROL DISPLAY LOCK ISPEXEC DISPLAY MSG(UTLZ000W) SET GDGDSN = &SUBSTR(1:&A-1,&STR(&PDSN)) IF &LENGTH(&STR(&GEN)) > 1 THEN + IF &SUBSTR(1:1,&STR(&GEN)) = &STR(+) AND + &SUBSTR(2:2,&STR(&GEN)) > 0 THEN + IF &BATCH = BATCH THEN + DO SET BATCHCC = 16 GOTO FINISH END ELSE + DO SET ZEDLMSG = &STR("+1" AND HIGHER RELATIVE + GDG GENERATIONS CANNOT BE + USED) ISPEXEC SETMSG MSG(UTLZ001W) SET PTDSN = SET PTRECFM = SET PTLRECL = SET PTBLKSIZ = GOTO REDISPLAY END ELSE + IF &SUBSTR(1:1,&STR(&GEN)) = &STR(+) OR + &SUBSTR(1:1,&STR(&GEN)) = &STR(-) THEN + SET GEN = &STR(MINUS&SUBSTR(2:&LENGTH(&STR(&GEN)),+ &STR(&GEN))) ELSE SET GEN = MINUS&GEN SET &&GEN = %GDGGEN DSN(&GDGDSN) IF &LASTCC = 0 THEN + ISPEXEC VGET &GEN SHARED SET GEN = &STR(&&)&STR(&GEN) IF &STR(&GEN) > THEN + SET PDSN = &STR(&GEN) ELSE + IF &BATCH = BATCH THEN + DO SET BATCHCC = 20 GOTO FINISH END ELSE + DO SET ZEDLMSG = &STR(COULD NOT RESOLVE THE + RELATIVE GDG GENERATION) ISPEXEC SETMSG MSG(UTLZ001W) GOTO REDISPLAY END END /********************************************************************** /* GET THE NECESSARY DCB INFORMATION * /********************************************************************** IF &SYSINDEX(&STR(*),&STR(&PMBR)) = 0 AND + &SYSINDEX(&STR(X'),&STR(&PMBR)) = 0 AND + &SYSINDEX(&STR(,),&STR(&PMBR)) = 0 AND + &SYSINDEX(&STR(:),&STR(&PMBR)) = 0 AND + &SYSINDEX(&STR(/),&STR(&PMBR)) = 0 AND + &STR(&PMBR) > THEN + DO SET SYSDVAL = &STR(&PMBR) READDVAL X1 X2 IF &STR(&X2) = THEN + DO SET PDSN = &STR(&PDSN(&PMBR)) SET PMBR = END END SET PTDSTYPE = LISTDSI '&PDSN' IF &LASTCC > 4 THEN + DO SET ZEDLMSG = &STR(PROBLEM WITH DATASET: &SYSDSN('&PDSN')) ISPEXEC SETMSG MSG(UTLZ001W) SET PTDSN = SET PTRECFM = SET PTLRECL = SET PTBLKSIZ = IF &BATCH = BATCH THEN + DO SET BATCHCC = 28 GOTO FINISH END GOTO REDISPLAY END ELSE + DO IF &SUBSTR(1:2,&STR(&SYSDSORG)) = PO THEN + SET PTDSTYPE = PDS SET PTDSN = &STR(&PDSN) SET PTRECFM = &STR(&SYSRECFM) SET PTLRECL = &STR(&SYSLRECL) SET PTBLKSIZ = &STR(&SYSBLKSIZE) IF &STR(&PCC) > THEN + IF &SUBSTR(&LENGTH(&STR(&PTRECFM)),&STR(&PTRECFM)) ¬= A AND + &SUBSTR(&LENGTH(&STR(&PTRECFM)),&STR(&PTRECFM)) ¬= M THEN + SET PTRECFM = &STR(&PTRECFM&PCC) ELSE + SET PTRECFM = &SUBSTR(1:&LENGTH(&STR(&PTRECFM))-1,+ &STR(&PTRECFM))+ &STR(&PCC) ELSE + IF &SUBSTR(&LENGTH(&STR(&PTRECFM)),&STR(&PTRECFM)) = A OR + &SUBSTR(&LENGTH(&STR(&PTRECFM)),&STR(&PTRECFM)) = M THEN + IF &BATCH ¬= &BATCH THEN + SET PTRECFM = &SUBSTR(1:&LENGTH(&STR(&PTRECFM))-1,+ &STR(&PTRECFM)) IF &BATCH = BATCH THEN + DO IF &STR(&CONFIG) = THEN + DO ISPEXEC TBVCLEAR PRINTIT ISPEXEC VGET (PTITPORT PTITLAND) PROFILE IF &STR(&PTITPORT) > AND + &SYSLRECL <= &DFLTPORT THEN + SET PTCONNAM = &STR(&PTITPORT) IF &STR(&PTITLAND) > AND + &SYSLRECL > &DFLTPORT THEN + SET PTCONNAM = &STR(&PTITLAND) IF &PTCONNAM = THEN SET PTCONNAM = DEFAULT END ELSE SET PTCONNAM = &STR(&CONFIG) ISPEXEC TBGET PRINTIT IF &LASTCC = 0 THEN + DO SET PTSEL = S ISPEXEC TBMOD PRINTIT END END END IF &BATCH = BATCH THEN + IF &STR(&PTDSN) > THEN + DO SET GOTOSEC = &STR(FINISH) GOTO PRINT END ELSE + DO SET BATCHCC = 24 GOTO FINISH END ELSE + GOTO &STR(&GOTOSEC) /********************************************************************** /* DISPLAY THE HELP TUTORIAL * /********************************************************************** HELPSEC: + ISPEXEC SELECT PGM(ISPTUTOR) PARM(UTILH106) SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR PRINTIT UTILITY + *** NO PROCESSING PERFORMED ***) ISPEXEC SETMSG MSG(UTLZ000) EXIT
Documentation
The PRINTIT utility is used to print sequential datasets or PDS members (PANVALET support is not implemented yet). It has been designed to work as a CLIST or as an EDIT MACRO. There is also a CLIST named $PRINTIT (with an alias of $P) which calls PRINTIT. $PRINTIT is designed to work with ISPF DSLIST screens (e.g. like ISPF option 3.4) such that you can type $PRINTIT next to a dataset name on a DSLIST screen and $PRINTIT calls PRINTIT, passing the name of the dataset to be printed. As a CLIST, PRINTIT can be invoked by typing TSO PRINTIT. You are presented with a screen where you can type the name of the dataset to be printed, and select what "print configuration" you wish to use. To print a dataset, simply place an "S" next to the desired print configuration and press . If you wish to see the JCL which is created and submit it yourself (or not submit it), place a "Y" in the "Review JCL ?" field. If you wish to use the JOBPARM ROOM parameter for delivery specification, you may do so on the main panel. You may also override the number of copies associated with a given print configuration by specifying a non-zero number in the COPIES field on the main panel A "print configuration" is simply a name to call a given combination of OUTPUT CARD parameters. They may specify that the printed output is to be printed with two pages on each side in landscape orientation for example. In the Fidelity environment, they may also specify where the printed output is to be delivered by using different MSGCLASS parameters. Some print configurations exist in the table today, and any user may add, change, or delete from this list (though you would want to change and delete items very carefully as someone else may need them). Print configurations can be added by placing an "A" next to one of the existing rows in the table. An existing configuration can be changed by placing a "C" next to the row to be changed. In either case, the user is presented with a screen where the desired print configuration can be created. A 1-8 character name and short description must be specified for each configuration. You should make it meaningful for other users to understand. Placing a "?" in any of the fields on the configuration screen will provide a pop-up help screen to explain it. As mentioned before, PRINTIT can be invoked as an EDIT MACRO as well. To do this, simply type PRINTIT on the command line while editing a file, and the name of the dataset which you are editing will pre-populate the dataset name in the PRINTIT main panel. Then select a print configuration as you would normally and press . It is important to note that if the dataset you are editing is a "physical sequential" dataset as opposed to a PDS member, the batch job which is trying to print the dataset will require you to exit the dataset before it can run. You will get system-generated "enqueue" messages to this effect. It is also important to note, that when editing a PDS member, the version which is most recently saved on DASD is the version which PRINTIT will actually print. Consequently, you may want save the member you are editing before calling PRINTIT. 1 PRINTIT may be invoked as an edit macro in another fashion. If you type PRINTIT on the command line while editing a dataset and then place your cursor on the beginning of a dataset name IN THE BODY OF THE TEXT, PRINTIT will attempt to parse the dataset name out of the text and pre-populate the dataset name field on the PRINTIT main panel. By setting a PF key to PRINTIT, printing both the dataset being edited and datasets referred to in the text can be accomplished quite easily. PRINTIT has another facility which allows you to specify a print configuration as your personal "default". Placing the "L" line command next to a print configuration establishes that print configuration as your default "landscape" orientation configuration. Placing the "P" line command next to a print configuration establishes that print configuration as your default "portrait" orientation configuration. The "P" and "L" may be placed on the same configuration if you wish. When you invoke PRINTIT as an EDIT MACRO or using $PRINTIT with a dataset name, the dataset which pre-populates the dataset name field is interrogated to determine its LRECL. If the LRECL is greater than 80, the landscape default is set, otherwise, the portrait default is set. You will notice that an "S" has been placed next to the appropriate default print setting when the PRINTIT main panel appears. You then need only press to submit the print job. If you do not wish to use the default, you can "blank" it out. If you call PRINTIT as a CLIST, and no dataset name is passed, then no default will be set. Support for custom JCL ISPF file tailoring skeletons has just been added to the PRINTIT utility (1/30/91). The PRINTIT JCL has been broken down into four different individual skeletons: PRINTIT1 (contains the JOB card), PRINTIT2 (contains the JOBPARM card), PRINTIT3 (contains the OUTPUT JCL statement), PRINTPDS (contains the PDS multi-member print support step), and PRINTIT4 (contains the job step to do the actual printing). By default, these skeletons are specified to be "file tailored" in that order. Using the new "Extended JCL Skeleton" screen, you may now specify up to 13 different ISPF skeletons to file tailor for a given print configuration. You may or may not chose to use PRINTIT1-4 or any part of them, or in that contiguous order. For instance several configurations have already been added which use skeletons in the order PRINTIT1, PRINTIT2, PRINTIT3, xxxxxxxx, PRINTPDS, PRINTIT4, zzzzzzzz. In these configurations "xxxxxxxx" is a "printer setup" step for some small XEROX laser printers which accept in-stream font specification. "zzzzzzzz" is the default font "reset" step for that printer. The use of these 13 skeletons is limited only by your imagination (and the MVS operating system). As of 2/1/91 PRINTIT supports multiple member PDS printing. This is accomplished via calling the PDS utility to create a list of members to print based on a "member group" specification, and the PRINTDS utility to "print" the selected members. "Member groups", in "PDS utility" terminology, are a way of specifying a subset of members within a PDS (or all members), using some special "wild card"-type characters. ISPF "help" panels will be added soon which specify the syntax needed. Until that time, the following lists information regarging valid "member group" syntax: Member names may be entered in either character or hexadecimal mode for any subcommand which processes member names. 1 Character member names may be from one to eight bytes long with no imbedded blanks, commas, parentheses, colons or slashes. Hexadecimal member names may contain from one to sixteen hexadecimal digits delimited by x' and '. X'd7c4e2f9' and PDS9 are entirely equivalent; also, x'333' and x'0333' are equivalent. A member name range, member name pattern or member name combination forms what is termed a member group. Note that a member list (that is, a parenthesized list containing member and member group specifications separated by commas) may also be used. Following are examples using the MEMBERS subcommand to define and display a member group: Member Group Members in the Group ------------ -------------------- aa AA (aa,bb) AA and BB (aa,bb/) AA and any member names containing BB : all members -- X'00' through X'FF' aa: members from AA... through X'FF' :bb members from X'00' through BB... aa:bb members between AA... and BB... inclusive (abc,d:) member ABC and those from D... through X'FF' aa/ member names containing AA anywhere /bb member names containing BB anywhere aa/bb member names containing AA and BB (aa/,bb/) member names containing AA or BB aa* members with names AA... *bb member names containing BB anywhere aa*bb member with names AA... and BB elsewhere (aa*,bb/) members with names AA... or with BB anywhere Any of the valid specifications listed above outside of parentheses may be combined inside of parentheses with each specification separated by a comma (","). You may have as many specifications separated by commas between the parentheses as you can fit. Each comma acts as an "OR" in processing the logic. By default, each page of a member being printed using multi-member capabilities will have a "title" at the top of it. If the dataset is printed with ANSI or "machine" control characters (either by your specifying it, or by the RECFM of the PDS) the titles will be suppressed. If you wish to suppress the titles yourself on a non-control character dataset, you must "review" the JCL and add the PRINTDS keyword NOTITLE. To do so, find the string "PRINTDS" and add a line after it containing simply "NOTITLE +". The "+" is important as it acts as a continuation character for the PRINTDS command.