Return to Mainframe Utilities Page
Module
/*******************************************************************/ /* CLIST : ISPFTABL */ /* CREATED BY : DAVID LEIGH */ /* DATE : 6-9-89 */ /* DESCRIPTION : THIS CLIST ALLOWS THE USER TO CREATE ISPF TABLES */ /* INTERACTIVELY AND/OR LOAD THEM FROM A DATASET. */ /*******************************************************************/ PROC 0 /**** SET MESSAGE DISPLAY ON/OFF BASED ON THE DEBUG SWITCH ***/ ISPEXEC VGET (DBGSWTCH) PROFILE IF &DBGSWTCH = &STR(ON) THEN + CONTROL MSG LIST CONLIST SYMLIST NOFLUSH ASIS ELSE + CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS /********************************************************************/ /* HANDLE ALL ERRORS HERE */ /********************************************************************/ ISPEXEC CONTROL ERRORS RETURN /********************************************************************/ /* SET INITIAL VARIABLES FOR USE IN THIS CLIST - MAKE CHANGES HERE! */ /********************************************************************/ SET SAVENAME = &STR(________) SET SAVEDSN = &STR(________.________.________.________.________) SET SAVETDSN = &STR(________.________.________.________.________) SET SORTEDIT = N SET SCALE = SET IMAGE = SET VARLINE1 = SET VARLINE2 = SET VARLINE3 = SET FSTG = SET PREVNEXT = SET BREC = SET EREC = SET INCR = SET TSTAT = 1 SET ZTDSELS = &STR(0000) SET KEY = ISPEXEC VPUT KEY SHARED /********************************************************************/ /* CREATE THE TEMPORARY TABLE. */ /********************************************************************/ ISPEXEC TBCREATE $$$$ITUT WRITE REPLACE + NAMES(FIELD KEY COL1 COL2 DEFAULT) /********************************************************************/ /********************************************************************/ /* M A I N L I N E */ /********************************************************************/ /********************************************************************/ MAINLINE: + ISPEXEC VPUT (SCALE TSTAT IMAGE VARLINE1 VARLINE2 VARLINE3 FSTG + PREVNEXT LINENUM SORTEDIT) SHARED ISPEXEC TBDISPL $$$$ITUT PANEL(ISPFTABL) SET SAVECC = &LASTCC IF &STR(&SAVETDSN) ¬= &STR(&TDSN) AND &STR(&TDSN) > THEN + DO ISPEXEC LIBDEF ISPTABL ISPEXEC LIBDEF ISPTABL DATASET ID('&TDSN') SET SAVETDSN = &STR(&TDSN) END ISPEXEC VGET (SCALE TSTAT IMAGE VARLINE1 VARLINE2 VARLINE3 FSTG + PREVNEXT LINENUM SORTEDIT) SHARED SET SYSDVAL = &STR(&ZCMD) READDVAL XCMD OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 OPT7 OPT8 OPT9 OPT10 OPT11 /********************************************************************/ /* BRANCH TO SECTIONS TO HANDLE ENTERED COMMAND */ /********************************************************************/ MAIN0001: + SET ZEDLMSG = &STR(VALID COMMANDS ARE: INSERT SAVE USE) IF &ZTDSELS > &STR(0000) THEN GOTO ROWSEC ELSE GOTO MAIN0002 MAIN0002: + IF &SAVECC > 7 THEN GOTO FINAL IF &TNAME ¬= &SAVENAME THEN GOTO TABLESEC MAIN0003: + SELECT &STR(&XCMD) WHEN (INSERT ¦ I) GOTO INSESEC WHEN (SAVE ¦ S) GOTO SAVESEC WHEN (USE ¦ U) GOTO USESEC WHEN (DEBUG ¦ D) GOTO DBUGSEC WHEN () GOTO MAIN0004 OTHERWISE ISPEXEC SETMSG MSG(UTLZ001) END MAIN0004: + IF &LSCROLL > AND &STR(&SYSNSUB(1,&FSTG)) > AND + &LOADDSN > THEN + DO SET ZEDLMSG = &STR(*** CANNOT BOTH "SCROLL" AND "FIND" ***) ISPEXEC SETMSG MSG(UTLZ001) GOTO MAINEXIT END IF &LSCROLL > AND &LOADDSN = THEN + DO SET ZEDLMSG = &STR(*** NO LOAD DATASET, SCROLL IGNORED ***) ISPEXEC SETMSG MSG(UTLZ000) SET LSCROLL = SET SCNUM = GOTO MAIN0005 END SELECT &STR(&LSCROLL) WHEN (U) GOTO UPSCRL WHEN (D) GOTO DOWNSCRL WHEN (L) GOTO LEFTSCRL WHEN (R) GOTO RGHTSCRL WHEN () GOTO MAIN0005 END MAIN0005: + IF &FCOMP = Y THEN GOTO PROCESS ELSE GOTO MAIN0006 MAIN0006: + IF &LOADDSN > AND &LOADFILE = OR + &LOADDSN > AND &LOADDSN ¬= &SAVEDSN THEN GOTO FILEALOC ELSE GOTO MAIN0007 MAIN0007: + IF &STR(&SYSNSUB(1,&FSTG)) > AND &LOADDSN = THEN + DO SET ZEDLMSG = &STR(*** NO LOAD DATASET, FIND IGNORED ***) ISPEXEC SETMSG MSG(UTLZ000) SET FSTG = GOTO MAIN0008 END IF &STR(&SYSNSUB(1,&FSTG)) > THEN GOTO FINDSEC ELSE GOTO MAIN0008 MAIN0008: + IF &SORTEDIT = Y AND &SORTDSN = THEN + DO SET ZEDLMSG = &STR(*** NO SORT DATASET, EDIT IGNORED ***) ISPEXEC SETMSG MSG(UTLZ000) SET SORTEDIT = N GOTO MAINEXIT END IF &SORTEDIT = Y THEN GOTO SORTSEC ELSE GOTO MAINEXIT MAINEXIT: + IF &STR(&ZCMD) = THEN + DO ISPEXEC TBTOP $$$$ITUT ISPEXEC TBSKIP $$$$ITUT NUMBER(&ZTDTOP) ISPEXEC VGET (ZVERB ZSCROLLN) IF &ZVERB = &STR(UP) THEN + ISPEXEC TBSKIP $$$$ITUT NUMBER(-&ZSCROLLN) IF &ZVERB = &STR(DOWN) THEN + ISPEXEC TBSKIP $$$$ITUT NUMBER(&ZSCROLLN) END SET ZCMD = IF &SAVECC > 7 THEN GOTO FINAL GOTO MAINLINE /********************************************************************/ /********************************************************************/ /* F I N A L I Z A T I O N */ /********************************************************************/ /********************************************************************/ FINAL: + ERROR RETURN CLOSFILE LOADFILE ERROR OFF ISPEXEC TBCLOSE &TNAME ISPEXEC TBCLOSE $$$$ITUT ISPEXEC LIBDEF ISPTABL EXIT /********************************************************************/ /********************************************************************/ /* S U B R O U T I N E S */ /********************************************************************/ /********************************************************************/ /********************************************************************/ /* PROCESS PENDING SELECTED ROWS */ /********************************************************************/ DBUGSEC: + IF &DEBUG = &STR(YES) THEN DO SET DEBUG = &STR(NO) SET ZEDLMSG = &STR(*** DEBUGGING IS OFF ***) CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS END ELSE DO SET DEBUG = &STR(YES) SET ZEDLMSG = &STR(*** DEBUGGING IS ON ***) CONTROL MSG LIST CONLIST SYMLIST NOFLUSH ASIS END ISPEXEC SETMSG MSG(UTLZ000) GOTO MAINEXIT ROWSEC: + DO WHILE &ZTDSELS ¬= &STR(0000) IF &KEY = D THEN + ISPEXEC TBDELETE $$$$ITUT ELSE + DO SET XFIELD = &FIELD SET XKEY = &KEY SET XCOL1 = &COL1 SET XCOL2 = &COL2 SET XDEFAULT = &STR(&SYSNSUB(1,&DEFAULT)) ISPEXEC TBGET $$$$ITUT ROWID(SAVEROW) SET YFIELD = &FIELD ISPEXEC TBTOP $$$$ITUT ISPEXEC TBVCLEAR $$$$ITUT SET FIELD = &XFIELD SET X = 0 ISPEXEC TBSCAN $$$$ITUT ARGLIST(FIELD) CONDLIST(EQ) DO WHILE &LASTCC = 0 SET X = &X + 1 ISPEXEC TBSCAN $$$$ITUT ARGLIST(FIELD) CONDLIST(EQ) END ISPEXEC TBSKIP $$$$ITUT ROW(&SAVEROW) IF &X > 0 AND &STR(&YFIELD) = &STR('''''''') OR + &X > 1 AND &STR(&YFIELD) ¬= &STR('''''''') THEN + DO SET ZEDLMSG = &STR("&XFIELD" ALREADY EXISTS....)+ FIELD NAMES MUST BE UNIQUE) ISPEXEC SETMSG MSG(UTLZ001) GOTO NEXTROW END IF &XCOL2 < &XCOL1 THEN + DO SET ZEDLMSG = &STR(COLUMN 2 MUST BE )+ GREATER THAN OR EQUAL TO COLUMN 1) ISPEXEC SETMSG MSG(UTLZ001) GOTO NEXTROW END IF &XCOL2 > AND &XCOL1 > AND + &STR(&SYSNSUB(1,&DEFAULT)) > THEN + DO SET ZEDLMSG = &STR(DEFAULT VALUES OR COLUMNS MAY + BE SPECIFIED....NOT BOTH) ISPEXEC SETMSG MSG(UTLZ001) GOTO NEXTROW END SET X = &SYSINDEX(&STR('),&STR(&XFIELD)) SET X = &X - 1 IF &X > 0 THEN + SET FIELD = &SUBSTR(1:&X,&STR(&XFIELD)) ELSE + SET FIELD = &XFIELD SET KEY = &XKEY SET COL1 = &XCOL1 SET COL2 = &XCOL2 SET DEFAULT = &STR(&SYSNSUB(1,&XDEFAULT)) ISPEXEC TBPUT $$$$ITUT NEXTROW: + END IF &ZTDSELS > &STR(0001) THEN ISPEXEC TBDISPL $$$$ITUT ELSE SET ZTDSELS = &STR(0000) END ISPEXEC TBSAVE $$$$ITUT GOTO MAIN0002 /********************************************************************/ /* PROCESS INSERT ('I') COMMAND - INSERT 'N' NEW BLANK ROWS */ /********************************************************************/ INSESEC: + IF &STR(&OPT1) = THEN SET OPT1 = 1 IF &STR(&OPT2) > THEN + DO SET ZEDLMSG = &STR(ONLY ONE OPTION MAY BE SPECIFIED FOR "I") ISPEXEC SETMSG MSG(UTLZ001) END ELSE + IF &DATATYPE(&STR(&OPT1)) = NUM THEN + DO SET X = 0 ISPEXEC TBVCLEAR $$$$ITUT SET FIELD = &STR('''''''') DO WHILE &X < &OPT1 ISPEXEC TBADD $$$$ITUT SET X = &X + 1 END ISPEXEC TBTOP $$$$ITUT END ELSE + DO SET ZEDLMSG = &STR(INSERT NUMBER MUST BE NUMERIC) ISPEXEC SETMSG MSG(UTLZ001) END GOTO MAIN0004 /********************************************************************/ /* PROCESS SAVE ('S') COMMAND - SAVE THE SPEC TABLE TO ANOTHER */ /********************************************************************/ SAVESEC: + DO WHILE &OPT1 = WRITENR PLEASE ENTER A TABLE NAME TO SAVE TO OR "CANCEL" ==> READ OPT1 END IF &STR(&OPT2) = CANCEL THEN GOTO MAIN0004 ELSE + PDS '&TDSN' REPRO $$$$ITUT TO(&OPT1) REPLACE GOTO MAIN0004 /********************************************************************/ /* PROCESS USE ('U') COMMAND - USE ANOTHER TABLE FOR $$$$ITUT */ /********************************************************************/ USESEC: + DO WHILE &OPT1 = WRITENR PLEASE ENTER A TABLE NAME TO USE OR "CANCEL" ==> READ OPT1 END IF &STR(&OPT2) = CANCEL THEN GOTO MAIN0004 ELSE + DO ISPEXEC TBOPEN &OPT1 NOWRITE ISPEXEC TBSKIP &OPT1 DO WHILE &LASTCC = 0 ISPEXEC TBADD $$$$ITUT ISPEXEC TBSKIP &OPT1 END ISPEXEC TBEND &OPT1 ISPEXEC TBTOP $$$$ITUT END GOTO MAIN0004 /********************************************************************/ /* OPEN THE LOAD FILE, DEFINE THE SCALE AND GET THE FIRST ROW */ /********************************************************************/ FILEALOC: + SET SAVEDSN = &LOADDSN ERROR RETURN CLOSFILE LOADFILE ERROR OFF LISTDSI '&LOADDSN' IF &LASTCC > 0 THEN + DO SET ZEDLMSG = &STR("&LOADDSN" PROBLEM : &SYSDSN('&LOADDSN')) ISPEXEC SETMSG MSG(UTLZ001) SET LOADDSN = GOTO MAINEXIT END SET X = 50 SET SC = &STR(----+----1----+----2----+----3----+----4----+----5) DO WHILE &X < &SYSLRECL SET SC = &STR(&SC----+----6----+----7----+----8----+----9----+----0) SET SC = &STR(&SC----+----1----+----2----+----3----+----4----+----5) SET X = &X + 100 END IF &SYSLRECL > 79 THEN SET ENDCOL = 79 ELSE SET ENDCOL = &SYSLRECL SET SCALE = &SUBSTR(1:&ENDCOL,&STR(&SC)) FREE DDNAME(LOADFILE) ALLOC DDNAME(LOADFILE) + DSN('&LOADDSN') + SHR KEEP ERROR + DO SET ERRCC = &LASTCC SELECT (&ERRCC) WHEN (400) DO SET EOF = YES SET ZEDLMSG = &STR(*** "&LOADDSN" IS EMPTY ***) ISPEXEC SETMSG MSG(UTLZ001) SET LOADDSN = SET LOADFILE = GOTO MAIN0007 END WHEN (588) RETURN OTHERWISE DO WRITE *** PROBLEM WITH CLIST ISPFTABL *** WRITE *** RETURN CODE = &ERRCC *** GOTO FINAL END END END SET EOF = NO OPENFILE LOADFILE INPUT GETFILE LOADFILE ERROR OFF SET DATALEN = &LENGTH(&STR(&SYSNSUB(1,&LOADFILE))) IF &DATALEN > &ENDCOL THEN + SET IMAGE = &SUBSTR(1:&ENDCOL,&STR(&SYSNSUB(1,&LOADFILE))) ELSE + SET IMAGE = &SUBSTR(1:&DATALEN,&STR(&SYSNSUB(1,&LOADFILE))) SET BEGCOL = 1 SET LINENUM = 1 SET SAVEDSN = &LOADDSN SET PREVNEXT = N SET BREC = 1 SET EREC = 9999999 SET INCR = 1 GOTO MAIN0007 /********************************************************************/ /* SCROLL THE LOAD FILE UPWARDS */ /********************************************************************/ UPSCRL: + IF &LINENUM = 1 THEN + DO SET ZEDLMSG = &STR(*** TOP OF LOAD FILE ***) ISPEXEC SETMSG MSG(UTLZ000) GOTO MAINEXIT END IF &SCNUM < 1 THEN SET SCNUM = 1 SET LINENUM = &LINENUM - &SCNUM IF &LINENUM < 1 THEN SET LINENUM = 1 SET X = 0 CLOSFILE LOADFILE OPENFILE LOADFILE INPUT DO WHILE &X < &LINENUM GETFILE LOADFILE SET X = &X + 1 END SET DATALEN = &LENGTH(&STR(&SYSNSUB(1,&LOADFILE))) IF &DATALEN > &ENDCOL THEN + SET IMAGE = &SUBSTR(&BEGCOL:&ENDCOL,&STR(&SYSNSUB(1,&LOADFILE))) ELSE + SET IMAGE = &SUBSTR(&BEGCOL:&DATALEN,&STR(&SYSNSUB(1,&LOADFILE))) SET LSCROLL = GOTO MAINEXIT /********************************************************************/ /* SCROLL THE LOAD FILE DOWNWARDS */ /********************************************************************/ DOWNSCRL: + ERROR + DO SET ERRCC = &LASTCC SELECT (&ERRCC) WHEN (400) DO SET EOF = YES RETURN END OTHERWISE DO WRITE *** PROBLEM WITH CLIST ISPFTABL *** WRITE *** RETURN CODE = &ERRCC *** GOTO FINAL END END END IF &SCNUM < 1 THEN SET SCNUM = 1 SET X = 0 DO WHILE &X < &SCNUM AND &EOF = NO GETFILE LOADFILE SET LINENUM = &LINENUM + 1 SET X = &X + 1 END ERROR OFF IF &EOF = YES THEN + DO SET LINENUM = &LINENUM - 1 SET ZEDLMSG = &STR(*** BOTTOM OF LOAD FILE ***) ISPEXEC SETMSG MSG(UTLZ000) END SET DATALEN = &LENGTH(&STR(&SYSNSUB(1,&LOADFILE))) IF &DATALEN > &ENDCOL THEN + SET IMAGE = &SUBSTR(&BEGCOL:&ENDCOL,&STR(&SYSNSUB(1,&LOADFILE))) ELSE + SET IMAGE = &SUBSTR(&BEGCOL:&DATALEN,&STR(&SYSNSUB(1,&LOADFILE))) SET LSCROLL = GOTO MAINEXIT /********************************************************************/ /* SCROLL THE LOAD FILE LEFT */ /********************************************************************/ LEFTSCRL: + IF &BEGCOL = 1 THEN + DO SET ZEDLMSG = &STR(*** ALREADY AT LOAD FILE LEFT BOUNDRY ***) ISPEXEC SETMSG MSG(UTLZ000) END ELSE + DO IF &SCNUM < 1 THEN SET SCNUM = 79 SET X = &BEGCOL - &SCNUM IF &X < 1 THEN + DO SET SCNUM = &X + &SCNUM - 1 SET &BEGCOL = &BEGCOL - &SCNUM END ELSE + SET &BEGCOL = &BEGCOL - &SCNUM SET &ENDCOL = &ENDCOL - &SCNUM END SET SCALE = &SUBSTR(&BEGCOL:&ENDCOL,&STR(&SC)) SET DATALEN = &LENGTH(&STR(&SYSNSUB(1,&LOADFILE))) IF &DATALEN > &ENDCOL THEN + SET IMAGE = &SUBSTR(&BEGCOL:&ENDCOL,&STR(&SYSNSUB(1,&LOADFILE))) ELSE + SET IMAGE = &SUBSTR(&BEGCOL:&DATALEN,&STR(&SYSNSUB(1,&LOADFILE))) SET LSCROLL = GOTO MAINEXIT /********************************************************************/ /* SCROLL THE LOAD FILE RIGHT */ /********************************************************************/ RGHTSCRL: + IF &ENDCOL = &SYSLRECL THEN + DO SET ZEDLMSG = &STR(*** ALREADY AT LOAD FILE RIGHT BOUNDRY ***) ISPEXEC SETMSG MSG(UTLZ000) END ELSE + DO IF &SCNUM < 1 THEN SET SCNUM = 79 SET X = &ENDCOL + &SCNUM IF &X > &SYSLRECL THEN + DO SET SCNUM = &SYSLRECL - &ENDCOL SET ENDCOL = &ENDCOL + &SCNUM END ELSE + SET ENDCOL = &ENDCOL + &SCNUM SET BEGCOL = &BEGCOL + &SCNUM END SET SCALE = &SUBSTR(&BEGCOL:&ENDCOL,&STR(&SC)) SET DATALEN = &LENGTH(&STR(&SYSNSUB(1,&LOADFILE))) IF &DATALEN > &ENDCOL THEN + SET IMAGE = &SUBSTR(&BEGCOL:&ENDCOL,&STR(&SYSNSUB(1,&LOADFILE))) ELSE + SET IMAGE = &SUBSTR(&BEGCOL:&DATALEN,&STR(&SYSNSUB(1,&LOADFILE))) SET LSCROLL = GOTO MAINEXIT /********************************************************************/ /* FIND A STRING IN THE FILE */ /********************************************************************/ FINDSEC: + IF &PREVNEXT ¬= N AND &PREVNEXT ¬= P THEN SET &PREVNEXT = N IF &PREVNEXT = P THEN + DO IF &LINENUM = 1 THEN + DO SET ZEDLMSG = &STR(*** TOP OF LOAD FILE ***) ISPEXEC SETMSG MSG(UTLZ001) GOTO MAIN0008 END CLOSFILE LOADFILE OPENFILE LOADFILE INPUT SET X = 0 SET Y = 0 SET LINENUM = &LINENUM - 1 SET ZEDLMSG = DO WHILE &X < &LINENUM SET X = &X + 1 GETFILE LOADFILE IF &SYSINDEX(&STR(&SYSNSUB(1,&FSTG)),+ &STR(&SYSNSUB(1,&LOADFILE))) > 0 THEN + DO SET ZEDLMSG = &STR(*** FOUND + "&STR(&SYSNSUB(1,&FSTG))" ***) ISPEXEC SETMSG MSG(UTLZ000) SET Y = &X END END IF &Y > 0 THEN + DO CLOSFILE LOADFILE OPENFILE LOADFILE INPUT SET X = 0 DO WHILE &X < &Y SET X = &X + 1 GETFILE LOADFILE END SET LINENUM = &X END ELSE + DO SET LINENUM = &LINENUM + 1 GETFILE LOADFILE SET ZEDLMSG = &STR(*** "&STR(&SYSNSUB(1,&FSTG))" + NOT FOUND ***) ISPEXEC SETMSG MSG(UTLZ001) END END ELSE + DO ERROR DO SET ERRCC = &LASTCC SELECT (&ERRCC) WHEN (400) DO SET EOF = YES SET ZEDLMSG = &STR(*** END OF FILE REACHED ***) ISPEXEC SETMSG MSG(UTLZ001) RETURN END WHEN (588) RETURN OTHERWISE DO WRITE *** PROBLEM WITH CLIST ISPFTABL *** WRITE *** RETURN CODE = &ERRCC *** GOTO FINAL END END END SET EOF = NO SET X = 0 SET ZEDLMSG = GETFILE LOADFILE DO WHILE &EOF = NO AND &STR(&ZEDLMSG) = SET X = &X + 1 IF &SYSINDEX(&STR(&SYSNSUB(1,&FSTG)),+ &STR(&SYSNSUB(1,&LOADFILE))) > 0 THEN + DO SET ZEDLMSG = &STR(*** FOUND + "&STR(&SYSNSUB(1,&FSTG))" ***) ISPEXEC SETMSG MSG(UTLZ000) SET LINENUM = &LINENUM + &X END ELSE + GETFILE LOADFILE END ERROR OFF IF &STR(&ZEDLMSG) = &STR(*** END OF FILE REACHED ***) THEN + DO CLOSFILE LOADFILE OPENFILE LOADFILE INPUT SET X = 0 DO WHILE &X < &LINENUM SET X = &X + 1 GETFILE LOADFILE END END END SET DATALEN = &LENGTH(&STR(&SYSNSUB(1,&LOADFILE))) IF &DATALEN > &ENDCOL THEN + SET IMAGE = &SUBSTR(&BEGCOL:&ENDCOL,&STR(&SYSNSUB(1,&LOADFILE))) ELSE + SET IMAGE = &SUBSTR(&BEGCOL:&DATALEN,&STR(&SYSNSUB(1,&LOADFILE))) GOTO MAIN0008 /********************************************************************/ /* LOAD THE TABLE (CREATE IF NECESSARY) */ /********************************************************************/ PROCESS: + ERROR RETURN CLOSFILE LOADFILE ERROR OFF IF &LASTCC > 4 THEN + DO SET ZEDLMSG = &STR(*** ISPTABL LIBDEF UNSUCCESSFUL : + RC = &LASTCC) ISPEXEC SETMSG MSG(UTLZ001) GOTO MAINEXIT END ISPEXEC TBSTATS &TNAME STATUS1(TSTAT) IF &TSTAT > 1 THEN + DO SET XKEYS = SET XNAMES = ISPEXEC TBVCLEAR $$$$ITUT ISPEXEC TBTOP $$$$ITUT DO WHILE &LASTCC = 0 IF &KEY > THEN SET &XKEYS = &STR(&XKEYS &FIELD) ELSE SET &XNAMES = &STR(&XNAMES &FIELD) ISPEXEC TBSKIP $$$$ITUT END ISPEXEC TBCREATE &TNAME WRITE KEYS(&XKEYS) NAMES(&XNAMES) IF &LASTCC > 4 THEN + DO SET ZEDLMSG = &STR(*** TABLE CREATE UNSUCCESSFUL : + RC = &LASTCC) ISPEXEC SETMSG MSG(UTLZ001) GOTO MAINEXIT END END ELSE + DO ISPEXEC TBOPEN &TNAME WRITE IF &LASTCC > 4 THEN + DO SET ZEDLMSG = &STR(*** TABLE OPEN UNSUCCESSFUL : + RC = &LASTCC) ISPEXEC SETMSG MSG(UTLZ001) GOTO MAINEXIT END END SET INPUTDSN = &LOADDSN IF &SORTDSN > THEN + DO SET ZEDLMSG = &STR(*** SORTING DATA FROM + "&LOADDSN" ***) ISPEXEC SETMSG MSG(UTLZ000) ISPEXEC CONTROL DISPLAY LOCK ISPEXEC DISPLAY PANEL(ISPFTABL) FREE ATTRLIST(ATTRIB2) ATTRIB ATTRIB2 OUTPUT + RECFM(&SYSRECFM) + LRECL(&SYSLRECL) + BLKSIZE(&SYSBLKSIZE) FREE DDNAME(SORTIN) ALLOC DDNAME(SORTIN) + DSN('&LOADDSN') + SHR KEEP IF &SYSUNITS = BLOCK THEN + SET SYSUNITS = &STR(&SYSUNITS(&SYSBLKSIZE)) DELETE SORTOUT FREE DDNAME(SORTOUT) ALLOC DDNAME(SORTOUT) + DSN(SORTOUT) + NEW CATALOG + UNIT(SYSDA) + SPACE(&SYSPRIMARY,&SYSSECONDS) &SYSUNITS RELEASE + USING(ATTRIB2) FREE DDNAME(SYSIN) ALLOC DDNAME(SYSIN) + DSN('&SORTDSN') + SHR KEEP FREE DDNAME(SORTMSG) ALLOC DDNAME(SORTMSG) DUMMY FREE DDNAME(SYSOUT) IF &DBGSWTCH = &STR(ON) OR + &DEBUG = &STR(YES) THEN + ALLOC DDNAME(SYSOUT) DSN(*) ELSE + ALLOC DDNAME(SYSOUT) DUMMY SORT SET SORTRC = &LASTCC FREE ATTRLIST(ATTRIB2) FREE DDNAME(SORTIN) FREE DDNAME(SORTOUT) FREE DDNAME(SORTMSG) FREE DDNAME(SYSOUT) FREE DDNAME(SYSIN) SET INPUTDSN = &SYSUID..SORTOUT END IF &SORTRC ¬= 0 THEN DO SET ZEDLMSG = &STR(*** RETURN CODE FROM THE SORT WAS &SORTRC ***) ISPEXEC SETMSG MSG(UTLZ001) GOTO MAINEXIT END SET ZEDLMSG = &STR(*** LOADING DATA FROM "&LOADDSN" INTO "&TNAME" ***) ISPEXEC SETMSG MSG(UTLZ000) ISPEXEC CONTROL DISPLAY LOCK ISPEXEC DISPLAY PANEL(ISPFTABL) FREE DDNAME(INFILE) ALLOC DD(INFILE) + DSN('&INPUTDSN') + SHR KEEP ERROR + DO SET ERRCC = &LASTCC SELECT (&ERRCC) WHEN (400) DO SET EOF = YES RETURN END WHEN (1:15) RETURN WHEN (588) DO SET &&FIELD = RETURN END OTHERWISE DO WRITE *** PROBLEM WITH CLIST ISPFTABL *** WRITE *** RETURN CODE = &ERRCC *** WRITE *** IN SECTION : PROCESS *** WRITE *** WORKING ON RECORD # &X WRITE *** RECORD VALUE = &STR(&SYSNSUB(1,&INFILE)) WRITE *** WORKING ON TABLE ROW # &CRP ID = &ROWID WRITE *** FIELD = &FIELD GOTO FINAL END END END SET EOF = NO SET X = 0 SET Y = 0 OPENFILE INFILE INPUT GETFILE INFILE DO WHILE &EOF = NO SET X = &X + 1 IF &EVAL(&X//10) = 0 THEN + DO SET ZEDLMSG = &STR(*** WORKING ON RECORD: &X) ISPEXEC CONTROL DISPLAY LOCK ISPEXEC DISPLAY MSG(UTLZ000W) END SET ERRCC = 0 ISPEXEC TBTOP $$$$ITUT SET SKIPCC = &LASTCC DO WHILE &SKIPCC = 0 IF &COL1 > 0 AND &COL2 > 0 THEN + SET &&FIELD = &SUBSTR(&COL1:&COL2,+ &STR(&SYSNSUB(1,&INFILE))) IF &STR(&SYSNSUB(1,&DEFAULT)) > THEN + SET &&FIELD = &STR(&DEFAULT) ISPEXEC TBSKIP $$$$ITUT ROWID(ROWID) POSITION(CRP) SET SKIPCC = &ERRCC END ISPEXEC TBADD &TNAME IF &LASTCC > 0 THEN SET Y = &Y + 1 GETFILE INFILE END ERROR OFF CLOSFILE INFILE FREE DDNAME(INFILE) ISPEXEC TBCLOSE &TNAME SET Y = &X - &Y SET ZEDLMSG = &STR(*** LOADED &Y OF &X RECORDS INTO &TNAME ***) ISPEXEC SETMSG MSG(UTLZ000) ISPEXEC LIBDEF ISPTABL GOTO FINAL /********************************************************************/ /* LOAD THE TEMP TABLE WITH THE EXISTING TABLE'S FIELDS */ /********************************************************************/ TABLESEC: + ISPEXEC TBOPEN &TNAME IF &LASTCC = 8 THEN + DO SET TSTAT = 2 GOTO MAIN0003 END ELSE SET TSTAT = 1 SET SAVENAME = &TNAME ISPEXEC TBEND $$$$ITUT ISPEXEC TBCREATE $$$$ITUT WRITE NAMES(FIELD KEY COL1 COL2 DEFAULT) ISPEXEC TBVCLEAR $$$$ITUT ISPEXEC LIBDEF ISPTLIB ISPEXEC LIBDEF ISPTLIB DATASET ID('&TDSN') ISPEXEC TBQUERY &TNAME KEYS(TBKEYS) + NAMES(TBNAMES) + KEYNUM(TBKEYNUM) + NAMENUM(TBNAMNUM) + ROWNUM(TBROWS) SET L1 = &LENGTH(&STR(&SYSNSUB(1,&TBKEYS))) SET TBKEYS = &SUBSTR(2:&L1-1,&STR(&SYSNSUB(1,&TBKEYS))) SET L1 = &LENGTH(&STR(&SYSNSUB(1,&TBNAMES))) SET TBNAMES = &SUBSTR(2:&L1-1,&STR(&SYSNSUB(1,&TBNAMES))) SET X = &STR(&TBKEYS &TBNAMES) SET X = &X DO WHILE &X > SET A = &SYSINDEX(&STR( ),&STR(&X)) SET A = &A - 1 IF &A < 1 THEN SET A = &LENGTH(&STR(&X)) IF &A > 0 THEN + DO ISPEXEC TBVCLEAR $$$$ITUT SET FIELD = &SUBSTR(1:&A,&STR(&X)) IF &SYSINDEX(&STR(&FIELD),&STR(&TBKEYS)) > 0 THEN + SET KEY = K ELSE + SET KEY = ISPEXEC TBADD $$$$ITUT ORDER SET A = &A + 2 SET SLEN = &LENGTH(&STR(&X)) IF &A > &SLEN THEN SET X = ELSE + SET &X = &SUBSTR(&A:&SLEN,&STR(&X)) END ELSE SET X = END ISPEXEC TBEND &TNAME ISPEXEC TBTOP $$$$ITUT SET SAVENAME = &TNAME GOTO MAIN0003 /********************************************************************/ /* EDIT THE SORT DATASET */ /********************************************************************/ SORTSEC: + ISPEXEC EDIT DATASET('&SORTDSN') IF &LASTCC > 8 THEN + DO SET ZEDLMSG = &STR(*** COULD NOT EDIT "&SORTDSN" + BROWSING IT INSTEAD ***) ISPEXEC SETMSG MSG(UTLZ000) ISPEXEC BROWSE DATASET('&SORTDSN') IF &LASTCC > 8 THEN + DO SET ZEDLMSG = &STR(*** COULD NOT ACCESS "&SORTDSN" + ***) ISPEXEC SETMSG MSG(UTLZ001) END END SET SORTEDIT = N GOTO MAINEXIT
Documentation
This utility allows you to load or append an ISPF table from a sequential file or PDS member. If the ISPF table exists, its table definition will be displayed, and the user can then specify which dataset columns go into which fields, or what default value will go into a field. If the ISPF table does not exist, the user can define the fields that will go into the table and in addition to loading the table, it will be created as well. The dataset from which the data will be loaded is also displayed with a column scale and can be scrolled 4 ways and strings can be found. Finally, the load dataset can be sorted/stripped prior to load via SyncSort by specifying a sort cards dataset (this may be edited from the ISPFTABL panel also).