显示ispf面板后,Rexx Pull无法使用clrscrn



目前我正在编写一个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

这3个星号表示您已经从全屏模式转到了行模式。REXX说的语句是行模式。您可能有一个使用备用屏幕大小(mod5、62 x 160等)的终端。TSO VTAM将强制***在主屏幕大小和备用屏幕大小之间进行更改以防止出现问题。使用以下ISPF服务,而不是CLRSCRN

地址ISPEXEC"CONTROL DISPLAY LINE START(1)">

这将使您处于联机模式并清除屏幕。当我使用CONTROL DISPLAY LINE时,您的REXX例程对我有效。这也告诉ISPF已经进入线路模式,这也可以避免使用CLRSCRN的屏幕损坏错误。

相关内容

  • 没有找到相关文章

最新更新