*copyc osd$default_pragmats

MODULE fmm$sl_rewind_file_command;

?? PUSH (LISTEXT := ON) ??
*copyc amc$fap_request_codes
*copyc ame$device_class_validation
*copyc ame$lfn_program_actions
*copyc amt$local_file_name
*copyc bat$tape_descriptor
*copyc cle$ecc_expression_result
*copyc fme$file_management_errors
*copyc fst$attachment_options
*copyc fst$file_attachment_choices
*copyc fst$tape_attachment_information
*copyc oss$job_paged_literal
*copyc ost$status
*copyc ost$string

*copyc amp$set_local_name_abnormal
*copyc fmp$get_cycle_description
*copyc fmp$unlock_path_table
*copyc osp$append_status_parameter
*copyc osp$fetch_locked_variable
*copyc osp$set_status_abnormal
*copyc rmp$log_debug_message
?? POP ??

  PROCEDURE [XDCL, #GATE] fmp$sl_rewind_file_command (
        local_file_name: amt$local_file_name;
    VAR status: ost$status);

    VAR
      ignore_status: ost$status,
      cycle_description: ^fmt$cycle_description,
      open_count: integer,
      p_tape_descriptor: ^bat$tape_descriptor;

    fmp$get_cycle_description (local_file_name, cycle_description, status);
    IF NOT status.normal THEN
      IF status.condition = fme$no_cycle_description THEN
        status.normal := TRUE;
      IFEND;
      RETURN;
    IFEND;

    /set_rewind_file_command/
    BEGIN
      IF cycle_description^.global_file_information <> NIL THEN
        osp$fetch_locked_variable (cycle_description^.
              global_file_information^.open_count, open_count);
        IF open_count <> 0 THEN
          amp$set_local_name_abnormal (local_file_name, ame$file_not_closed,
               amc$rewind_files_cmd, 'BAP$SL_REWIND_FILE_COMMAND', status);
          EXIT /set_rewind_file_command/;
        IFEND;

        IF (cycle_description^.global_file_information^.device_dependent_info.device_class =
             rmc$magnetic_tape_device) AND
             (cycle_description^.global_file_information^.device_dependent_info.tape_descriptor <> NIL)
             THEN
          RESET cycle_description^.global_file_information^.device_dependent_info.tape_descriptor;
          NEXT p_tape_descriptor IN cycle_description^.global_file_information^.device_dependent_info.
               tape_descriptor;

          rmp$log_debug_message ('FMM$SL_REWIND_FILE_COMMAND setting rewind_file_command to TRUE');
          p_tape_descriptor^.rewind_file_command := TRUE;
        IFEND;
      IFEND;

    END /set_rewind_file_command/;

    fmp$unlock_path_table;

  PROCEND fmp$sl_rewind_file_command;

MODEND fmm$sl_rewind_file_command;
