PROC select_user_menu, selum, menu (
  prolog_call, pc      : boolean = false
  natural_language, nl : name = us_english
  status               : var of status = $optional
  )


*IF $variable(euv$proc_doc,declared)<>'UNKNOWN'
"     The purpose of this command procedure is to activate the MENU/VE user
"menu.  For checkout purposes the variable EUV$MENU_VE_CATALOG can be declared
"XDCL'd outside this procedure to specify a different catalog than $SYSTEM.MENU_VE.
*IFEND


  EXIT_PROC WHEN $job(mode) <> 'INTERACTIVE'


  IF $variable(euv$menu_ve_catalog declared) = 'NONLOCAL' THEN
    create_variable euv$menu_ve_catalog k=string s=xref
  ELSE
    create_variable euv$menu_ve_catalog k=string s=xdcl v='$SYSTEM.MENU_VE'
  IFEND

  IF $variable(euv$initial_call,declared)='NONLOCAL' THEN
    create_variable euv$initial_call k=boolean s=xref
  ELSE
    create_variable euv$initial_call k=boolean s=xdcl v=FALSE
  IFEND

  IF $variable(euv$terminal_class,declared)='NONLOCAL' THEN
    create_variable euv$terminal_class k=string s=xref
  ELSE
    create_variable euv$terminal_class k=string s=xdcl v='TTY'
  IFEND

  IF $variable(euv$terminal_model,declared)='NONLOCAL' THEN
    create_variable euv$terminal_model k=string s=xref
  ELSE
    create_variable euv$terminal_model k=string s=xdcl v='NONE'
  IFEND

  IF $variable(euv$check_mail,declared)='NONLOCAL' THEN
    create_variable euv$check_mail k=boolean s=xref
  ELSE
    create_variable euv$check_mail k=boolean s=xdcl v=true
  IFEND

  IF $variable(euv$main_menu_display,declared)='NONLOCAL' THEN
    create_variable euv$main_menu_display k=boolean s=xref
  ELSE
    create_variable euv$main_menu_display k=boolean s=xdcl v=true
  IFEND

  IF $variable(euv$terminal_page_width,declared)='NONLOCAL' THEN
    create_variable euv$terminal_page_width k=integer s=xref
  ELSE
    create_variable euv$terminal_page_width k=integer s=xdcl v=80
  IFEND

  IF $variable(euv$terminal_page_length,declared)='NONLOCAL' THEN
    create_variable euv$terminal_page_length k=integer s=xref
  ELSE
    create_variable euv$terminal_page_length k=integer s=xdcl v=24
  IFEND

  IF $variable(euv$terminal_echo,declared)='NONLOCAL' THEN
    create_variable euv$terminal_echo k=boolean s=xref
  ELSE
    create_variable euv$terminal_echo k=boolean s=xdcl v=off
  IFEND

  IF $variable(euv$terminal_parity,declared)='NONLOCAL' THEN
    create_variable euv$terminal_parity k=string s=xref
  ELSE
    create_variable euv$terminal_parity k=string s=xdcl v='EVEN'
  IFEND

  IF $variable(euv$terminal_cfc,declared)='NONLOCAL' THEN
    create_variable euv$terminal_cfc k=boolean s=xref
  ELSE
    create_variable euv$terminal_cfc k=boolean s=xdcl v=on
  IFEND

  IF $variable(euv$terminal_path,declared)='NONLOCAL' THEN
    create_variable euv$terminal_path k=string s=xref
  ELSE
    create_variable euv$terminal_path k=string s=xdcl v=''
  IFEND

  IF $variable(euv$working_catalog,declared)='NONLOCAL' THEN
    create_variable euv$working_catalog k=string s=xref
  ELSE
    create_variable euv$working_catalog k=string s=xdcl v='$USER'
  IFEND

  IF $variable(euv$menu_command,declared)='NONLOCAL' THEN
    create_variable euv$menu_command k=string s=xref
  ELSE
    create_variable euv$menu_command k=string s=xdcl d=10
  IFEND

  IF $variable(euv$menu_text,declared)='NONLOCAL' THEN
    create_variable euv$menu_text k=string s=xref
  ELSE
    create_variable euv$menu_text k=string s=xdcl d=10
  IFEND

  create_variable euv$ignore_stat          k=status
  create_variable euv$local_stat           k=status
  create_variable euv$terminal_model_login k=string s=xdcl v='NONE'
  create_variable line_image               k=string
  create_variable euv$int_style            k=string s=xdcl v='line'
  create_variable natural_language         k=string v=$string($value(natural_language))
  create_variable euv$terminal_hold_page   k=boolean s=local v=off
  create_variable euv$initial_check_mail   k=boolean s=xdcl  v=on
  create_variable euv$main_quit            k=boolean s=xdcl  v=false

user_block: ..
  BLOCK

    IF (NOT $file($fname(euv$menu_ve_catalog//'.euf$user_explain_'//natural_language), permanent)) OR ..
          (NOT $file($fname(euv$menu_ve_catalog//'.euf$user_menu_'//natural_language) permanent)) THEN
      put_line ' Unable to locate the manuals for natural language '//natural_language//'.' o=$response
      EXIT user_block
    IFEND

    euv$terminal_model_login = $translate(lower_to_upper, $terminal_model)
    IF euv$terminal_model_login = '' THEN
      euv$terminal_model_login = 'NONE'
    IFEND

    IF (euv$terminal_model <> 'NONE') AND ..
          ((euv$terminal_model_login = euv$terminal_model) OR (euv$terminal_model_login = 'NONE')) THEN
      set_terminal_attribute tm=$name(euv$terminal_model) pw=euv$terminal_page_width ..
            pl=euv$terminal_page_length e=euv$terminal_echo p=$name(euv$terminal_parity) ..
            cfc=euv$terminal_cfc status=euv$local_stat
      EXIT user_block WHEN NOT euv$local_stat.normal
      IF ($job(c170_os_type) = 'NOS') OR ($job(c170_os_type) = 'NOS/BE') THEN
        set_terminal_attribute tc=$name(euv$terminal_class) status=euv$local_stat
      IFEND
      EXIT user_block WHEN NOT euv$local_stat.normal
    IFEND

    IF euv$terminal_path <> '' THEN
      create_variable  pa_file  k=string
      pa_file= $unique
      display_program_attribute  output= $fname(pa_file)
      EDIT_FILE file= $fname(pa_file) output=$null prolog=$null status=euv$local_stat
        locate_text  $translate(UTL,euv$terminal_path) status=euv$local_stat
        IF NOT euv$local_stat.normal  THEN
          setpa add_library= $fname(euv$terminal_path) status=euv$ignore_stat
        IFEND
      QUIT
    IFEND

    set_working_catalog $fname(euv$working_catalog) status=euv$local_stat
    IF NOT euv$local_stat.normal THEN
      put_line l=('1  The working catalog you have selected, '//euv$working_catalog, ..
            '    is not known to the system.  Your working catalog has been set to $USER.') o=$output
      set_working_catalog $user status=euv$local_stat
      EXIT user_block WHEN NOT euv$local_stat.normal
    IFEND

    IF $value(prolog_call) = true THEN
      EXIT_PROC WHEN euv$main_menu_display = false
      accept_line v=line_image i=input ..
                  p='Press RETURN when ready to go into User''s Menu or QUIT to exit to NOS/VE./'
      IF $translate(lower_to_upper, $substr(line_image, 1, 4)) = 'QUIT' THEN
        EXIT user_block
      IFEND
    IFEND

    IF $interaction_style(screen) THEN
      euv$int_style = 'screen'
    ELSEIF $interaction_style(desktop) THEN
      euv$int_style = 'desktop'
    IFEND

*IF $variable(euv$proc_doc,declared)<>'UNKNOWN'
" Track original terminal attribute 'hold_page'. This is set to
" off in MENU_VE session
*IFEND

    attr_file= $unique
    display_terminal_attribute  output= $fname(attr_file)
    EDIT_FILE file= $fname(attr_file) output=$null prolog=$null status=euv$ignore_stat
      locate_text 'Hold_Page' status= euv$ignore_stat
      line_image= $line_text
    QUIT
    IF $scan_string('on',line_image) <> 0  THEN
       euv$terminal_hold_page= on
    IFEND
    detach_file  $fname(attr_file) status= euv$ignore_stat


    detach_file $local.euf$user_explain status=euv$ignore_stat
    detach_file $local.euf$user_menu status=euv$ignore_stat

    copy_file i=$fname(euv$menu_ve_catalog//'.euf$user_explain_'//natural_language) o=$local.euf$user_explain ..
          status=euv$local_stat
    EXIT user_block WHEN NOT euv$local_stat.normal
    copy_file i=$fname(euv$menu_ve_catalog//'.euf$user_menu_'//natural_language) o=$local.euf$user_menu ..
          status=euv$local_stat
    EXIT user_block WHEN NOT euv$local_stat.normal

    change_interaction_style style=line
    set_terminal_attribute  hp=off

    WHEN  INTERRUPT  DO
      continue
    WHENEND

    quit: WHILE  NOT  euv$main_quit  DO
      explain m=$local.euf$user_menu status=euv$local_stat
    WHILEND quit

    change_interaction_style style=$name(euv$int_style)
    set_terminal_attribute  hp=euv$terminal_hold_page

  BLOCKEND user_block

  IF NOT euv$local_stat.normal THEN
    put_line (' The following error occured while in the NOS/VE User''s Menu:', ' '//$strrep(euv$local_stat)) ..
          o=$response
    accept_line v=line_image i=input p=' Press RETURN when ready to continue./'
  IFEND

  put_line l=('1 You have exited the NOS/VE Menus and may now enter NOS/VE commands.', ..
        '  To re-display the NOS/VE Main Menu you must enter the NOS/VE command', ..
        '0    SELECT_USER_MENU or SELUM', ' ') o=$output

  detach_file $local.euf$user_explain status=euv$ignore_stat
  detach_file $local.euf$user_menu status=euv$ignore_stat

PROCEND select_user_menu
