SOURCE Section: TBV - ISPF table viewer, Startup Shell: REXX EXEC /* TBV - Invokes ISPF Table View Utility ( REXX ) */ Trace Off Parse Arg tblname tbllib Address ISPEXEC "LIBDEF ISPPLIB DATASET ID('userid.ISPF.PANELS')" /* If arguments are not passed, request them via panel TBVENT */ If tblname = '' Then do Address ISPEXEC "DISPLAY PANEL(TBVENT)" If rc > 0 Then Call Ending end If tbllib = '' /* Optional - Test; if ok, then LIBDEF it */ Then do dsn = SYSDSN(tbllib) If dsn = 'OK' Then do Zerrsm = "Table Lib unavailable" Zerrlm = "Dataset" tbllib "not OK, Sysdsn:" dsn Zerralrm = "YES" Zerrhm = "*" Address ISPEXEC "SETMSG MSG(ISRZ002)" Call Ending end Address ISPEXEC "LIBDEF ISPTLIB DATASET ID("tbllib")" end Address ISPEXEC "TBSTATS" tblname "STATUS1("sta1") STATUS2("sta2")" opened_it = 0 If sta1 = 1 & sta2 = 1 /* on input lib(sta1=1) but not open(sta2=1)*/ Then do Address ISPEXEC "TBOPEN" tblname "NOWRITE" opened_it = 1 end If ( sta1 > 1 & sta2 = 1 ) /* otherwise unavailable */ Then do Zerrsm = "Table not found" Zerrlm = "Table could not be opened? Status:" sta1 sta2 Zerralrm = "YES" Zerrhm = "*" Address ISPEXEC "SETMSG MSG(ISRZ002)" Call Ending end /* call the table viewer */ Address ISPEXEC , "SELECT CMD(EX 'userid.ISPF.CLIST(TBVIEW)' '"tblname"' EXEC)" If opened_it = 1 Then Address ISPEXEC "TBEND" tblname If tbllib = '' Then Address ISPEXEC "LIBDEF ISPTLIB" Ending: Address ISPEXEC "LIBDEF ISPPLIB" Exit --------------------------------------------------------------------------------------------- ------- TBVIEW - ISPF table viewer, Core: REXX EXEC --------------------------------------------------------------------------------------------- ------- /* Generic ISPF table viewer ( REXX ) */ Trace Off tblname = arg(1) Address ISPEXEC "CONTROL ERRORS RETURN" /* Phase 1 - query the table, capture variable names */ Address ISPEXEC "TBQUERY" tblname "KEYS(KEYS) NAMES(NAMES)", "KEYNUM(KEYNUM) NAMENUM(NAMENUM)" keys = strip(keys,l,'(') ; keys = strip(keys,t,')') names = strip(names,l,'(') ; names = strip(names,t,')') varnum = keynum + namenum allvars = keys names /* chain keys and names together */ do col = 1 to varnum /* arrays of column headings, widths*/ name.col = word(allvars,col) /* name of the variable */ hdw.col = length(name.col) /* width of name */ dwid.col = 0 /* max width of data found */ end /* Phase 2 - Review the table for data displayed widths -- currently fixed to max out at zscreenw-1 (usually 79) */ Address ISPEXEC "VGET ZSCREENW" maxwid = zscreenw - 1 /* need one for attribute byte */ Address ISPEXEC "TBTOP" tblname tbrc = 0 do while tbrc = 0 Address ISPEXEC "TBSKIP" tblname tbrc = rc if tbrc = 0 then do col = 1 to varnum if length(value(name.col)) > dwid.col then dwid.col = length(value(name.col)) end end /* Phase 3 - Set reserved width, headings for each column, and use to build screen widths. */ maxscr = 1 /* total screens required to display all columns */ modhdrs = '' ; modvars = '' ; mdzvars = '' cols_this_screen = 0 /* what's been used so far */ do col = 1 to varnum if dwid.col = 0 then dwid.col = 1 if dwid.col > maxwid then dwid.col = maxwid grtrwid = max(hdw.col,dwid.col) rsvd.col = 1 + grtrwid /* one space between columns */ hdng.col = ' ' || center(name.col,grtrwid,'-') if cols_this_screen + rsvd.col > zscreenw then do /* starting a new screen for this column */ modhdr.maxscr = modhdrs /* save prior screen formats */ modvar.maxscr = modvars mdzvar.maxscr = mdzvars modhdrs = '' ; modvars = '' ; mdzvars = '' maxscr = maxscr + 1 /* begin a new screen */ cols_this_screen = 0 end modhdrs = modhdrs || hdng.col if col <= keynum /* these are high intensity */ then marker = left('@z',dwid.col+1) else marker = left('\z',dwid.col+1) modvars = modvars || center(marker, rsvd.col) mdzvars = mdzvars name.col cols_this_screen = cols_this_screen + rsvd.col end modhdr.maxscr = modhdrs /* save the last screen format */ modvar.maxscr = modvars mdzvar.maxscr = mdzvars /* Phase 4 - Display the table using prepared screens. Saves and sets 4 pkfeys to allow left and right scrolling effect. */ Address ISPEXEC "VGET (ZPF10 ZPF11 ZPF22 ZPF23) PROFILE" spf10 = zpf10 ; spf11 = zpf11 ; spf22 = zpf22 ; spf23 = zpf23 zpf10 = 'TLEFT' ; zpf11 = 'TRIGHT' zpf22 = 'TLEFT' ; zpf23 = 'TRIGHT' Address ISPEXEC "VPUT (ZPF10 ZPF11 ZPF22 ZPF23) PROFILE" curscrn = 1 crp = 1 call load_screen_vars viewrc = 0 do while viewrc < 8 Address ISPEXEC "TBTOP" tblname Address ISPEXEC "TBSKIP" tblname "NUMBER("crp")" Address ISPEXEC "TBDISPL" tblname "PANEL(TBVIEW)" viewrc = rc if viewrc < 8 then do crp = ztdtop if zcmd = 'TRIGHT' then do curscrn = curscrn + 1 if curscrn > maxscr then curscrn = 1 call load_screen_vars end else if zcmd = 'TLEFT' then do curscrn = curscrn - 1 if curscrn = 0 then curscrn = maxscr call load_screen_vars end end end zpf10 = spf10 ; zpf11 = spf11 ; zpf22 = spf22 ; zpf23 = spf23 Address ISPEXEC "VPUT (ZPF10 ZPF11 ZPF22 ZPF23) PROFILE" Ending: Return load_screen_vars : /* moves current screen formats to actives */ modhdrs = modhdr.curscrn modvars = modvar.curscrn mdzvars = mdzvar.curscrn Return ------------------------------------------------------------------------------ TBVENT - ISPF table viewer, Entry Panel: ISPF PANEL ------------------------------------------------------------------------------ )Attr type(text) intens(low) skip(on) )body width(&zscreenw) expand(//) +/-/%ISPF Table Viewer+/-/ %Command ==>_ZCMD + + Enter%ISPF Table+to view: %==>_tblname + + Enter the%ISPF Table Library+in which the Table resides (if not current): %==>_tblli b + +Press%Enter+to begin Table View +Press%End Key+to quit )init )proc ver (&tblname,nb,name) ver (&tbllib,dsname) )end ---------------------------------------------------------------------------- TBVIEW - ISPF table viewer, Table Display Panel: ISPF PANEL ------------------------------------------------------------------------------ )attr default(%+_) @ type(output) intens(high) color(red ) /* key values */ \type(output) intens(high) color(green) /* name values */ ~ type(output) intens(high) just(right) caps(off) /* screen x of n */ )body width(&zscreenw) expand(//) +ISPF Table :\TBLNAME +/-/ %Command ==>_ZCM D ~scrnum + &modhdrs )model &modvars )init .zvars = '&mdzvars' &pt1 = 'Screen' &pt2 = 'of' &scrnum = '&pt1 &curscrn &pt2 &maxscr' &ztdmark = '---------- Bottom of Table ----------' )end