?? RIGHT := 110 ??
MODULE jmm$manage_qfile_interfaces;
?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc jmc$job_management_id
*copyc ofe$error_codes
*copyc ost$caller_identifier
?? POP ??
*copyc amp$return
*copyc avp$system_displays
*copyc avp$system_operator
*copyc fsp$copy_data_and_close_files
*copyc jmp$close_files_for_copqf
*copyc jmp$get_qfile_attributes
*copyc jmp$open_files_for_copqf
*copyc jmp$terminate_qfile
*copyc jmp$validate_name
*copyc osp$disestablish_cond_handler
*copyc osp$establish_block_exit_hndlr
*copyc osp$set_status_abnormal
?? OLDTITLE ??
?? NEWTITLE := 'Global Declarations Declared by This Module', EJECT ??
?? OLDTITLE ??
?? NEWTITLE := '[XDCL, #GATE] jmp$copy_qfile', EJECT ??
*copy jmh$copy_qfile

  PROCEDURE [XDCL, #GATE] jmp$copy_qfile
    (    system_file_name: jmt$system_supplied_name;
         target_file: fst$file_reference;
         target_ring: ost$valid_ring;
     VAR status: ost$status);

    VAR
      caller_id: ost$caller_identifier,
      control_info: fst$copy_control_information,
      good_name: jmt$name,
      ignore_status: ost$status,
      potential_name: jmt$name,
      qfile_fid: amt$file_identifier,
      qfile_lfn: amt$local_file_name,
      target_fid: amt$file_identifier;

?? NEWTITLE := 'abort_handler', EJECT ??
    PROCEDURE abort_handler
      (    condition: pmt$condition;
           condition_information: ^pmt$condition_information;
           save_area: ^ost$stack_frame_save_area;
       VAR handler_status: ost$status);

      VAR
        ignore_status: ost$status;

{ The following call works for queue files as well as output files since its parameters are
{ amt$local_file_name and amt$file_identifier, i.e. not specific to output files.

      jmp$close_files_for_copqf (qfile_fid, qfile_lfn, target_fid, ignore_status);

    PROCEND abort_handler;
?? OLDTITLE, EJECT ??

    status.normal := TRUE;
    #CALLER_ID (caller_id);
    IF caller_id.ring > osc$sj_ring_3 THEN
      IF NOT avp$system_operator () THEN
        osp$set_status_abnormal (jmc$job_management_id, ofe$sou_not_active,
              'SYSTEM_OPERATION', status);
        RETURN;
      IFEND;
    IFEND;

{ Validate specified system_file_name.

    potential_name.kind := jmc$system_supplied_name;
    potential_name.system_supplied_name := system_file_name;
    jmp$validate_name (potential_name, good_name, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    osp$establish_block_exit_hndlr (^abort_handler);

{ Retrieve the control information required by fsp$copy_data_and_close_files.

    jmp$open_files_for_copqf (good_name.system_supplied_name, target_file, target_ring, control_info,
          qfile_fid, qfile_lfn, target_fid, status);
    IF NOT status.normal THEN
      osp$disestablish_cond_handler;
      RETURN;
    IFEND;

{ Copy the queue file into the target file.  Ignore any ring validation error condition.  Close the
{ files at ring 3.

    fsp$copy_data_and_close_files (qfile_fid, target_fid, control_info, status);

{ The following call works for queue files as well as output files since its parameters are
{ amt$local_file_name and amt$file_identifier, i.e. not specific to output files.

    IF NOT status.normal THEN
      IF (status.condition = ame$ring_validation_error) THEN
        jmp$close_files_for_copqf (qfile_fid, qfile_lfn, target_fid, status);
      ELSE
        jmp$close_files_for_copqf (qfile_fid, qfile_lfn, target_fid, ignore_status);
      IFEND;
    ELSE
      amp$return (qfile_lfn, status);
    IFEND;

    osp$disestablish_cond_handler;

  PROCEND jmp$copy_qfile;
?? OLDTITLE ??
?? NEWTITLE := '[XDCL, #GATE] jmp$util_get_qfile_attributes', EJECT ??
*copy jmh$util_get_qfile_attributes

  PROCEDURE [XDCL, #GATE] jmp$util_get_qfile_attributes
    (    attribute_options_p: ^jmt$qfile_attribute_options;
         attribute_results_keys_p: ^jmt$results_keys;
     VAR attribute_work_area_p: ^SEQ ( * );
     VAR attribute_results_p: ^jmt$qfile_attribute_results;
     VAR number_of_qfiles_found: jmt$qfile_status_count;
     VAR status: ost$status);

    IF (NOT avp$system_displays ()) AND (NOT avp$system_operator ()) THEN
      osp$set_status_abnormal (jmc$job_management_id, ofe$sou_not_active,
            'SYSTEM_DISPLAYS or SYSTEM_OPERATION', status);
      RETURN;
    IFEND;

    jmp$get_qfile_attributes (attribute_options_p, attribute_results_keys_p, attribute_work_area_p,
          attribute_results_p, number_of_qfiles_found, status);
  PROCEND jmp$util_get_qfile_attributes;
?? OLDTITLE ??
?? NEWTITLE := '[XDCL, #GATE] jmp$util_terminate_qfile', EJECT ??
*copy jmh$util_terminate_qfile

  PROCEDURE [XDCL, #GATE] jmp$util_terminate_qfile
    (    system_file_name: jmt$system_supplied_name;
         termination_options_p: ^jmt$qfile_termination_options;
     VAR status: ost$status);

    IF NOT avp$system_operator () THEN
      osp$set_status_abnormal (jmc$job_management_id, ofe$sou_not_active, 'SYSTEM_OPERATION', status);
      RETURN;
    IFEND;

    jmp$terminate_qfile (system_file_name, termination_options_p, status);
  PROCEND jmp$util_terminate_qfile;
?? OLDTITLE ??
MODEND jmm$manage_qfile_interfaces;
