Wow. I'm way too lazy to do all that. I don't think I'll bother with high lighting the table entries. I'll just "mark" them with a code field.
On Sat, Jan 29, 2022 at 10:45 AM Willy Jensen <[email protected]> wrote: > A demo of ISPF dynamic area. It handles scrolling. > /* > rexx > Demo ISPF panel using dynamic scrollable area > > It changes the color of the text if line cmd is 1, 2, 3 or 4 > > See the panel source at the end > > > Input is 3 rexx stems, pos 1 in each stem is the panel attribute > > psel selection field > > pmbr member name - leading text > > ptxt just some text > > > Panel attributes > > x'11' input color turq caps off hilite uscore > > x'12' input color yellow caps off hilite uscore > > x'13' input color red caps off hilite uscore > > x'14' output color turq caps off > > x'15' output color green caps off > > x'16' output color pink caps off > > x'17' output color white caps off > > > Control and reference variables > > dpascsrwt panel width > > dpaarea dynamic area > > dpacsrp cursor pos in field > > dpacsrf fieldname of cursor > > */ > > > parse value '111213'x with pai1 +1 pai2 +1 pai3 > > parse value '14151617'x with pao1 +1 pao2 +1 pao3 +1 pao4 > > dpascrwt=80 > > address ispexec "control errors return" > > address ispexec > > "vget (zscrmaxd zscrmaxw)" > > > Call Load > > pcsr = 1 > > Call Display > > say 'End...' > > exit 0 > > > Display: > > dpatop=1 /* position in data */ > > pnlareap=6 /* line in panel where the area is found */ > > pnlaread=zscrmaxd-pnlareap /* area depth */ > > do forever > > /* format screen area */ > > if dpatop>pseln-pnlaread+1 then dpatop=pseln-pnlaread+1 > > /*if dpatop>pseln then dpatop=pseln */ > > if dpatop<1 then dpatop=1 > > dpaarea='' > > do n=dpatop to pseln > > > dpaarea=dpaarea||left(left(psel.n,3)left(pmbr.n,9)ptxt.n,dpascrwt-1)||pao2 > end > > /* control display, pull info */ > > "display panel(ISPDYN2#)" > > "vget (zverb zscrolla zscrolln)" > > if rc>4 | wordpos(zverb,'END RETURN')>0 then return 0 > > > /* handle linecmd */ > > lcn=0 > > do lcp=2 to zscrmaxd*dpascrwt by dpascrwt > lcmd=strip(substr(dpaarea,lcp,2)) > lcn=lcn+1 > if lcmd<>'' then do > /*say 'lcmd at' lcn+dpatop-1'='lcmd*/ > n=lcn+dpatop-1 > if wordpos(lcmd,'1 2 3 4')>0 then do > ptxt.n=overlay(value('pao'lcmd),ptxt.n) > psel.n=left(psel.n,1) > end > else psel.n=left(psel.n,1)'?'lcmd > end > end > > /* handle scrolling */ > if wordpos(zverb,'DOWN UP')>0 then do > vs=space(zverb zscrolla,0) /* verb & scroll */ > Select > when vs='UPMAX' then dpatop=1 > when vs='DOWNMAX' then dpatop=pseln -dpalvl+1 > when zverb='UP' then dpatop=dpatop-zscrolln > when zverb='DOWN' then dpatop=dpatop+zscrolln > otherwise nop > end /* select */ > end /* scroll */ > end /* panel processing */ > exit xmsg('Logic error 1') > > XMsg: if arg(1)<>'' then say arg(1);return word(arg(2) 0,1) > > Load: > parse value '' with psel. pmbr. ptxt. > Call PipeData > if rc<>0 then exit xmsg('bad pipe rc' rc) > do n=1 to data.0 > psel.n = pai1 > pmbr.n = pao1 || word(data.n,1) > ptxt.n = pao2 || right(n,3) subword(data.n,2) > end > psel.0 = data.0 > pseln = data.0 > drop data. > return 0 > > Pipedata: > q=100 > do n=1 to q > data.n='LINE'n 'text for line' n > end > data.0=q > return 0 > > /* panel > )Attr > + type(text ) color(green) caps(off) > " type(text ) color(blue ) caps(off) > _ type(input ) color(turq ) caps(on ) hilite(uscore) > | area(dynamic) extend(on) scroll(on) /* required */ > /* input 1 - 3 */ > 11 type(datain ) color(turq ) caps(off) hilite(uscore) > 12 type(datain ) color(yellow) caps(off) hilite(uscore) > 13 type(datain ) color(red ) caps(off) hilite(uscore) > /* text 1 - 4 */ > 14 type(dataout) color(turq ) caps(off) > 15 type(dataout) color(green ) caps(off) > 16 type(dataout) color(pink ) caps(off) > 17 type(dataout) color(white ) caps(off) > /* text color override */ > 18 type(char) color(white) > )Body expand(\\) width(&dpascrwt) > %\ \Demo scrollable dynamic panel area\ \+ > %ISPF cmd ==>_zcmd \ \+ +Scrl_scrl+ > + > + > + > |dpaarea\ \| > )Init > .cursor = &dpacsrf /* set cursor in field */ > .csrpos = &dpacsrp /* set cursor pos in field */ > )Proc > &dpacsrp = .csrpos /* get cursor pos in field */ > &dpacsrf = .cursor /* get fieldname of cursor */ > &dpalvl = lvline(dpaarea) > )End > */ > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM-MAIN > ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
