Можно ли скрыть пользовательский ввод в программе REXX

Мне нужно ПОЛУЧИТЬ пароль, который введет пользователь, но не хочу, чтобы символы отображались на экране. Не могли бы вы помочь мне добиться этого в REXX.


person Karthick Kathiresan    schedule 06.08.2013    source источник
comment
Где работает ваш код REXX? ISPF? Окна? линукс? ОС/2? Какой диалект REXX вы используете? ООРЕКС? Регина?   -  person cschneid    schedule 06.08.2013
comment
Он будет работать в ISPF, я не использую OOREXX или Regina. Я запускаю это в z/OS.   -  person Karthick Kathiresan    schedule 06.08.2013


Ответы (2)


Поскольку вы работаете в ISPF, вы можете определить панель, которая будет находиться в конкатенации ISPPLIB с полем пароля, которое не отображается.

person cschneid    schedule 06.08.2013

Как @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 ??? я давно не использовал мейнфрейм) для ее проверки.

person Bruce Martin    schedule 07.08.2013
comment
Спасибо Брюс за помощь. - person Karthick Kathiresan; 14.08.2013
comment
Я не могу видеть панель во время выполнения вышеуказанной команды. Не могли бы подсказать, как просмотреть панель - person Karthick Kathiresan; 14.08.2013
comment
Есть ли какие-либо сообщения???, также отобразите код возврата и посмотрите его в руководстве по ISPF. Наконец, я добавил дополнительную информацию в конце своего ответа. - person Bruce Martin; 15.08.2013
comment
Спасибо, Брюс, и, наконец, теперь это работает. Спасибо за вашу помощь:) - person Karthick Kathiresan; 19.08.2013