我需要提取用户将键入的密码,但不希望字符显示在屏幕上。你能帮我在 REXX 中实现这一点吗?
2 回答
由于您在 ISPF 中运行,您可以定义一个面板以驻留在 ISPPLIB 连接中,并带有一个不显示的密码字段。
作为@cshneid,使用 ISPF 面板(并将其放在 ISPPLIB 中)。这是一个示例面板,其中包含取自ISPF 手册的密码字段(请参阅 $ 属性) 。
)ATTR
* TYPE(TEXT) INTENS(HIGH) COLOR(WHITE) CAPS(OFF)
# TYPE(TEXT) INTENS(HIGH) COLOR(BLUE) CAPS(OFF)
@ TYPE(TEXT) INTENS(LOW) COLOR(BLUE) HILITE(REVERSE)
? TYPE(TEXT) INTENS(LOW) COLOR(TURQ) CAPS(OFF)
_ TYPE(INPUT) INTENS(HIGH) COLOR(YELLOW)
$ TYPE(INPUT) INTENS(NON)
ø TYPE(OUTPUT) INTENS(LOW) COLOR(TURQ) CAPS(OFF)
)BODY
* --------------------------@EMPLOYEE RECORD*--------------------------
# SERIAL NO.*===>_SERNUM +&rbl %
#
#
# NAME:?&LAST, &FIRST
#
# ADDRESS:øADDR1 +
# øADDR2 +
# øADDR3 +
# øADDR4 +
#
# POSITION:øPOSIT +
#
# YEARS EXPERIENCE:øYRS+
#
# SALARY:øSALARY + # PASSWORD*===>$PSW +
# (Password is required for salary)
#
#
* Enter#END*command to terminate application.
#
)PROC
VER(&SERNUM,NB,NUM)
.ATTR(.CURSOR) = 'COLOR(RED) HILITE(BLINK)'
)END
请注意,我没有可用于检查的大型机,因此以下内容可能存在一些语法错误:
显示面板的 Rexx 命令:
Address ispexec display panel(panelName)
如果您需要将 DSN 添加到 ISPPLIB
"ispexec libdef ispplib dataset id(panel-dsn)"
背景资料
ISPF 使用一系列文件(ispplib、ispmlib、isptlib 等)来存储它使用的详细信息。您可以使用rexx/clist 程序中的LIBDEF函数将额外的 PDS(临时)添加到 ISPF 。从历史上看,这些 PDS 的 RECFM=FB 并且 LRECL 为 80。这已经改变。您应该检查现有 ispplib PDS 的属性并使用类似的属性。
要显示面板,它需要存储在 ISPPLIB(或使用LIBDEF分配给 ispplib 的 PDS )中。
如果您将面板存储在 pds my.panels(test) 中并将 my.panels 分配给 ISPPLIB,则 rexx 为:
/* rexx */
address ispexec 'display panel(test)'
say rc /* show return code, will indicate possible errors */
如果你使用LIBDEF那么 rexx 是
/* rexx */
address ispexec "libdef ispplib dataset id(panel-dsn)"
say rc
address ispexec 'display panel(test)'
say rc /* show return code, will indicate possible errors */
编辑宏指南有一个服务列表(还有返回码)
如果将面板分配到面板库中,也可以使用 ispf 测试模式(ispf 7.1 ???自从我使用 Mainframe 已经有一段时间了)来测试它