PROCEDURE (HIDDEN) cmp$install_configuration (
  deadstart_phase, dp: key
      installation, reinstallation, continuation
    keyend = $required
  operator_intervention_required, oir: boolean = $required
  prolog_procedure_name, ppn: name = $required
  operator_intervention_occurred, oio: (VAR) boolean = $required
  status)

"$FORMAT=OFF
VAR
   cmv$configuration_activated: (xref) boolean
   cmv$device_file_copy_status: (xref) status
   configuration_missing: boolean
   ignore_status: status
   intervene: boolean=operator_intervention_required
   local_status: status
   menu_selection: string
   message_name: name
VAREND

"$FORMAT=ON

  message_name = none
  configuration_missing = false
  IF ($file($local.physical_config, opened)) AND ..
        ($file($local.physical_config, size) > 0) THEN
    change_file_attribute $local.physical_config ra=(11, 11, 11) ..
          status=ignore_status
    copy_file $local.physical_config $local.physical_configuration ..
          status=local_status
    IF deadstart_phase = continuation THEN
      IF NOT cmv$device_file_copy_status.normal THEN
        message_name = missing_installed_config
        configuration_missing = true
        intervene = true
      ELSEIF intervene AND local_status.normal THEN
        rap$display_message message_module=sysdp_messages ..
              message_name= installed_config_ok to=$output
      ELSEIF NOT local_status.normal THEN
        configuration_missing = true
        intervene = true
      IFEND
    ELSEIF NOT local_status.normal THEN
      configuration_missing = true
    IFEND
  ELSE
    configuration_missing = true
    IF deadstart_phase = continuation THEN
      intervene = true
      IF cmv$device_file_copy_status.normal THEN
        message_name = missing_ds_file_config
      ELSE
        message_name = missing_installed_config
      IFEND
    IFEND
  IFEND

  IF message_name <> none THEN
    rap$display_message message_module=sysdp_messages ..
          message_name= message_name to=$output
    rap$press_next
  IFEND

  IF configuration_missing THEN
    change_file_attribute $local.cmf$default_configuration ra=(11, 11, 11) ..
          status=ignore_status
    copy_file $local.cmf$default_configuration ..
          $local.physical_configuration status=ignore_status
    IF deadstart_phase <> continuation THEN
      rap$prompt_via_menu menu_module= unconfigured_ds_menu menu_selections=..
             (install_default, define_configuration) ..
            selection_chosen=menu_selection status=local_status
      IF local_status.normal THEN
        IF $name(menu_selection) = install_default THEN
          intervene = false
        ELSE
          intervene = true
          rap$display_message message_module=sysdp_messages ..
                message_name= unconfigured_deadstart_banner to=$output
          rap$press_next
        IFEND
      ELSE
        rap$display_message message_module=sysdp_messages ..
              message_name=report_menu_fault to=$output
        display_value local_status
        intervene = true
        rap$display_message message_module=sysdp_messages ..
              message_name= unconfigured_deadstart_banner to=$output
        rap$press_next
      IFEND
    ELSE
      intervene = true
      rap$display_message message_module=sysdp_messages ..
            message_name= unconfigured_deadstart_banner to=$output
      rap$press_next
    IFEND
  IFEND

  delete_file $local.physical_config status=ignore_status

  change_file_attribute $local.physical_configuration ra=(11, 11, 11) ..
        status=ignore_status

  IF intervene THEN
    rap$display_message message_module=sysdp_messages ..
          message_name=entering_pcu_banner to=$output
    IF deadstart_phase = continuation THEN
      rap$display_message message_module=sysdp_messages ..
            message_name=continuation_ds to=$output
    IFEND
  IFEND

  IF deadstart_phase <> continuation THEN
    IF prolog_procedure_name <> none THEN
      PHYSICAL_CONFIGURATION_UTILITY
        cmp$execute_prolog_commands ..
              prolog_procedure_name=prolog_procedure_name ..
              prolog_file=pcu_subcommands ..
              continue_on_error=false status=local_status
      QUIT
      IF NOT local_status.normal THEN
        rap$display_message message_module=sysdp_messages ..
              message_name=report_prolog_error ..
              message_parameters=$string(prolog_procedure_name) to=$output
        display_value local_status o=$output
        IF intervene = false THEN
          rap$display_message message_module=sysdp_messages ..
                message_name=entering_pcu_banner to=$output
          intervene = true
        IFEND
      IFEND
    IFEND
  IFEND

pcu: ..
  WHILE NOT cmv$configuration_activated DO
    IF intervene THEN
      PHYSICAL_CONFIGURATION_UTILITY status=local_status
        include_file command prompt='PCU'
      "$QUIT
      IF local_status.normal AND (NOT cmv$configuration_activated) THEN
        PHYSICAL_CONFIGURATION_UTILITY status=ignore_status
          IF $variable(cmv$deadstart_simulation, defined) THEN
            verify_physical_configuration mainframe=cmv$simulation_mf_name ..
                  status=local_status
          ELSE
            install_physical_configuration status=local_status
          IFEND
        QUIT
      IFEND
    ELSE
      PHYSICAL_CONFIGURATION_UTILITY status=ignore_status
        IF $variable(cmv$deadstart_simulation, defined) THEN
          verify_physical_configuration mainframe=cmv$simulation_mf_name ..
                status=local_status
        ELSE
          install_physical_configuration status=local_status
        IFEND
      QUIT
    IFEND

    IF local_status.normal AND $variable(cmv$deadstart_simulation, defined) ..
          THEN
      cmv$configuration_activated = true
    ELSEIF NOT local_status.normal THEN
      rap$display_message message_module=sysdp_messages ..
            message_name=report_error to=$output
      display_value local_status o=$output
      IF $variable(cmv$deadstart_simulation, defined) THEN
        rap$prompt_via_menu menu_module= pcu_simulation_menu menu_selections..
              =(install_configuration activate_volumes) ..
              selection_chosen=menu_selection status=local_status
        IF local_status.normal THEN
          IF $name(menu_selection) = activate_volumes THEN
            cmv$configuration_activated = true
          IFEND
        IFEND
      ELSE
        IF intervene = false THEN
          rap$display_message message_module=sysdp_messages ..
                message_name=entering_pcu_banner to=$output
          intervene = true
        IFEND
      IFEND
    IFEND
  WHILEND pcu

  rap$display_message message_module=sysdp_messages ..
        message_name= configuration_installed to=$output

  operator_intervention_occurred = intervene

PROCEND cmp$install_configuration
