Мне нужно ПОЛУЧИТЬ пароль, который введет пользователь, но не хочу, чтобы символы отображались на экране. Не могли бы вы помочь мне добиться этого в REXX.
Можно ли скрыть пользовательский ввод в программе 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 и т. д.) для хранения используемых деталей. Вы можете добавить дополнительные PDS (на временной основе) в ISPF, используя функцию LIBDEF в программах rexx/clist. Исторически сложилось так, что в этих PDS RECFM=FB, а LRECL равен 80. Это изменилось. Вы должны проверить атрибуты существующих PDS ispplib и использовать аналогичные атрибуты.
Чтобы отобразить панель, ее необходимо сохранить в ISPPLIB (или в PDS, выделенном для ispplib с использованием LIBDEF).
если вы сохраните панель в 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 ??? я давно не использовал мейнфрейм) для ее проверки.