
  PROCEDURE pfp$r2_condition_handler
    (    condition: pmt$condition;
         p_condition_info: ^pmt$condition_information;
         p_sfsa: ^ost$stack_frame_save_area;
     VAR handler_status: ost$status);

    VAR
      variant_path: pft$variant_path,
      status_id: ost$status_identifier,
      local_status: ost$status;

    variant_path.complete_path := TRUE;
    variant_path.p_complete_path := ^path;

    IF NOT process_non_local_exit THEN
      pfp$log_ascii ('***PF Condition Handler***', $pmt$ascii_logset [pmc$system_log, pmc$job_log],
            pmc$msg_origin_system, {critical_message} FALSE, local_status);
      pfp$log_path (variant_path, $pmt$ascii_logset [pmc$system_log, pmc$job_log], pmc$msg_origin_system,
            {critical_message} FALSE, local_status);
    IFEND;

    CASE condition.selector OF
    = pmc$system_conditions, pmc$block_exit_processing, mmc$segment_access_condition =
      IF process_non_local_exit THEN
        RETURN;
      IFEND;

      IF catalog_locator.attached THEN
        catalog_locator.abort_catalog_operation := TRUE;
        pfp$return_catalog (catalog_locator, local_status);
        IF NOT local_status.normal THEN
          pfp$report_system_error (local_status);
        IFEND;
      IFEND;

      syp$pop_inhibit_job_recovery;

      IF pfv$locked_apfid <> 0 THEN
        pfp$release_locked_apfid (pfv$locked_apfid, local_status);
        pfv$locked_apfid := 0;
      IFEND;

      osp$set_status_from_condition (status_id, condition, p_sfsa, local_status, handler_status);
      osp$recoverable_system_error ('UNEXPECTED STATUS', ^local_status);

      status := local_status;
      initiate_non_local_exit;


    = pmc$user_defined_condition =
      IF condition.user_condition_name = 'OSC$JOB_RECOVERY' THEN
       {syp$invalidate_open_sfid (catalog_locator.system_file_id, local_status);
        initiate_non_local_exit;
      ELSE
        pmp$continue_to_cause (pmc$execute_standard_procedure, handler_status);
      IFEND;
    ELSE
      pmp$continue_to_cause (pmc$execute_standard_procedure, handler_status);
    CASEND;

  PROCEND pfp$r2_condition_handler;

