目前我正在编写一个rexx程序,我需要屏蔽密码输入。我使用此代码显示我的面板:
address ispexec"libdef ispplib dataset id('my.pds')
address ispexec 'display panel(member)'
这非常有效,并将密码返回给变量,我在其中执行各种检查。
之后我继续我的rexx计划。发生的下一个功能是通过使用Rexx的'say''pull'方法从用户那里获取输入。这是发生奇怪错误的地方。
我必须再次检查用户输入,如果它无效,它会循环回到'pull'。但是,在返回'pull'而不是允许用户输入数据时,程序获得数据符号'***'的底部。这当然会导致无限循环,然后用户就无法输入数据。
我相信原因是显示面板,然后使用clrscrn。因为我可以取出clrscrn,它工作正常,但数据截断在其他页面上。或者我可以通过不显示ispf面板来牺牲用户密码,它可以工作。但它一起失败了。
我想知道发生了什么和潜在的解决方案。
Rexx Code i用于在显示面板后复制错误:
do while chk <> 'N'
clrscrn
do i = 1 to 5
say '-test'
end
pull chk
end
结果一个用户输入''
-test
-test
-test
-test
-test
' ' <---- User inputs space, invalid entry, has to be 'N'
*** <-- for some reason hits bottom of data
然后它循环返回结果:
-test
-test
-test
-test
-test
*** <---- automatically hits bottom of data
重申一下,如果我取出clrscrn,数据的底部永远不会发生。但错误太多次,数据截断到另一页。
重新插入clrscrn,不要显示ispf面板。代码完美无瑕,数据底部永远不会发生。
面板代码:
)PANEL
)ATTR
~ TYPE(INPUT) INTENS(NON) Pad(_)
! TYPE(TEXT) COLOR(RED) SKIP(ON)
)BODY WINDOW(80,24)
! CREATE YOUR PIN NUM
!--------------------------------------------
!
! ENTER YOUR PIN:~INP !
! CONFIRM PIN...:~INPT!
!
! MUST BE 4-DIGITS
)END
在类似情况之前,我也打电话给另一个小组:
)PANEL
)ATTR
~ TYPE(INPUT) INTENS(NON) Pad(_)
! TYPE(TEXT) COLOR(RED) SKIP(ON)
)BODY
! VERIFY YOUR IDENTITY
!--------------------------------------------
!
! ENTER YOUR PIN: ~Z !
)INIT
&ZEDSMSG = ''
&ZEDLMSG = ''
.ZVARS = '( INP )'
.ATTR(INP) = '&ATTRPIN'
)PROC
&RESP = .RESP
)END
答案 0 :(得分:0)
3个星号表示您已从全屏模式切换到线模式。 REXX说声明是行模式。您可能有一个使用备用屏幕尺寸(mod5,62 x 160等)的终端。 TSO VTAM将强制***防止在主屏幕和备用屏幕尺寸之间切换时出现问题。使用以下ISPF服务而不是CLRSCRN
解决ISPEXEC“CONTROL DISPLAY LINE START(1)”
这将使您进入线模式并清除屏幕。当我使用CONTROL DISPLAY LINE时,您的REXX例程适用于我。这也告诉ISPF已经输入了行模式,这也可以避免使用CLRSCRN的屏幕损坏错误。