PROCEDURE activate_scf (
  load_map, lm: file = $null
  dump_file, df: file = $optional
  job_class, jc: name = system
  notify_after_aborting, naa: boolean = false
  protocol_trace, pt: (BY_NAME, ADVANCED) boolean = false
  status)

*IF $variable(rav$proc_doc,declared)<>'UNKNOWN'

"   This request activates SCF.

*IFEND

  VAR
    abort_file_commands: file = $system.batch_device_support.scf_abort_file_commands
    dump_file_specified : boolean = $specified(dump_file)
    dump_file_value : file = $local.$null
    load_map_options: name = none
    local_status: status
    scf_library: file = $system.batch_device_support.osf$batch_device_support
  VAREND

  IF NOT $file(scf_library permanent) THEN
    EXIT_PROC WITH $status(false 'AM' ame$file_not_known scf_library 'SCF_ACTIVATION')
  IFEND

  MANAGE_JOBS
    select_job name=$name('scf'//$mainframe(id)) job_state=(deferred, queued, initiated) ..
          user_information='Status and Control Facility (SCF) for NOS/VE' status=local_status
    IF local_status.normal THEN
      IF $size(jmv$selected_jobs) > 0 THEN
        EXIT_PROC WITH $status(false 'RA' 0 'An identical SCF job was found. SCF will not be activated')
      IFEND
    ELSE
      EXIT_PROC WITH local_status
    IFEND
  QUIT
  IF $specified(load_map) THEN
    load_map_options = all
  ELSE
    load_map_options = none
  IFEND

IF dump_file_specified THEN
  dump_file_value = dump_file
IFEND

  IF $file(abort_file_commands, permanent) THEN
    REPEAT
      delete_file file=abort_file_commands status=local_status
    UNTIL NOT local_status.normal
  IFEND

  TASK ring=11
COLLECT_TEXT output=abort_file_commands until='** END OF ABORT COMMANDS **' substitution_mark='#' status=local_status

  VAR
    abort_commands_status: status
    dump_file: file = $fname('$system.batch_device_support.scf_dump_'//$date('Y2M2D2')//'_'//$time('H24MMSS'))
  VAREND

  IF #dump_file_specified# THEN
    dump_file = #dump_file_value#
  IFEND

  display_message message=' ' to=job
  display_message message='**** Please write a PSR against SCF/VE and provide' to=job
  display_message message='**** as supporting material a permanent file backup' t=job
  display_message message='**** of catalog $SYSTEM.BATCH_DEVICE_SUPPORT.' t=job
  display_message message=' ' to=job

"  The following commands will display the abort information
"  through the use of the debugger.

  set_file_attributes dump_file fc=list pf=continuous
  put_line '1***** ABORT DUMP OF SCF' o=dump_file
  change_file_attributes file=dump_file ring_attributes=(6, 11, 11)
  put_line '       '//$date(iso)//' '//$time(millisecond) o=dump_file.$eoi
  put_line '       '//$job(os_version)//' - '//$default_family//' - CYBER '//..
$processor(model_number, 0)//' Serial '//$processor(serial_number, 0) o=dump_file.$eoi
  put_lines ('', ' ***** ENVIRONMENT:', '') output=dump_file.$eoi
  display_debugging_environment display_option=user_address output=dump_file.$eoi
  display_debug_task_status task_number=all output=dump_file.$eoi
  put_lines ('', ' ***** TRACEBACK:', '') output=dump_file.$eoi
  display_call count=all start=1 display_option=all_calls output=dump_file.$eoi
  put_lines ('', ' ***** JOB LOG:', '') output=dump_file.$eoi
  display_log display_option=200 output=dump_file.$eoi
  put_lines ('', ' ***** REGISTERS:', '') output=dump_file.$eoi
  display_register kind=all_program number=all type=hex output=dump_file.$eoi
  put_lines ('', ' ***** STACK FRAMES:', '') output=dump_file.$eoi
  display_stack_frame count=all start=1 display_option=all output=dump_file.$eoi
  put_lines ('', ' ***** STATIC SECTION:', '') output=dump_file.$eoi
  display_memory section=$static module=$name($current_module) byte_offset=0 byte_count=16 repeat_count=all ..
        output=dump_file.$eoi
  IF $variable(nfv$appl_def_segment_for_scf, declared) = 'LOCAL' THEN
    put_lines ( '-***** NFV$APPL_DEF_SEGMENT_FOR_SCF:', '') output=dump_file.$eoi
    display_memory address=?nfv$appl_def_segment_for_scf byte_offset=0 byte_count=16 ..
          repeat_count=0FFFFF(16) output=dump_file.$eoi
    delete_variable name=nfv$appl_def_segment_for_scf status=abort_commands_status
  IFEND

  IF $variable(nfv$notify_after_aborting, defined) THEN
    IF nfv$notify_after_aborting THEN
      send_operator_message ..
            m='SCF job failed, see $SYSTEM.BATCH_DEVICE_SUPPPORT.SCF_OUTPUT_'//$mainframe(id) ..
            oc=system_operator
    IFEND
  IFEND
** END OF ABORT COMMANDS **
    IF NOT local_status.normal THEN
      IF local_status.condition = ame$file_not_known THEN
        local_status=$status(false 'PF' pfe$unknown_permanent_file $string(abort_file_commands))
      IFEND
      EXIT PROCEDURE WITH local_status
    IFEND
  TASKEND

  JOB user_job_name=$name('scf'//$mainframe(id)) job_abort_disposition=terminate job_class=job_class ..
        job_destination_usage=ve_local job_execution_ring=6 job_recovery_disposition=terminate ..
        output_disposition=$fname('$system.batch_device_support.scf_output_'//$mainframe(id)) ..
        substitution_mark='!' user_information='Status and Control Facility (SCF) for NOS/VE' ..
        status=local_status

    SYSTEM_OPERATOR_UTILITY capability=system_operation
      VAR
        ignore_status: status
        nfv$notify_after_aborting : (JOB) boolean = !notify_after_aborting!
        scf_job_status: status
      VAREND

      IF !protocol_trace! THEN
        VAR
          nfv$rhf_protocol_trace : (JOB) string = 'BTFC'
        VAREND
      IFEND

      change_message_level il=full status=ignore_status

      set_debug_ring ring=6

      execute_task library=!scf_library! starting_procedure=nfp$status_and_control_facility ..
            abort_file=!abort_file_commands! load_map=!load_map! load_map_options=!load_map_options! ..
            status=scf_job_status

      display_value scf_job_status
    END_SYSTEM_OPERATOR_UTILITY
  JOBEND

  EXIT_PROC WITH local_status

PROCEND activate_scf
