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
