?? NEWTITLE := 'NOS/VE Basic_Access_method : Change Tape BT&RT' ??
MODULE bam$change_tape_bt_and_rt;
?? RIGHT := 110 ??

?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc ame$fap_validation_errors
*copyc ame$improper_file_id
*copyc amt$call_block
*copyc amt$fap_layer_number
*copyc amt$fap_pointer
*copyc amt$file_identifier
*copyc bat$instance_attributes
*copyc ost$status
?? POP ??
*copyc baf$task_file_entry_p
*copyc osp$set_status_abnormal
*copyc bav$magnetic_tape_device_faps
*copyc bav$task_file_table
?? OLDTITLE ??
?? NEWTITLE := '[xdcl] BAP$CHANGE_TAPE_BT_AND_RT', EJECT ??

  PROCEDURE [XDCL] bap$change_tape_bt_and_rt
    (    file_identifier: amt$file_identifier;
         layer_number: amt$fap_layer_number;
         block_type: amt$block_type;
         record_type: amt$record_type;
     VAR status: ost$status);

    CONST
      interface_name = 'BAP$CHANGE_TAPE_BT_AND_RT';

    VAR
      file_instance_p: ^bat$task_file_entry;

?? NEWTITLE := 'CHANGE_BLOCK_AND_RECORD_TYPE', EJECT ??

    PROCEDURE change_block_and_record_type
      (    block_type: amt$block_type;
           record_type: amt$record_type;
           layer: {i/o} ^bat$fap_descriptor;
           static_label: {i/o} ^bat$instance_static_attributes);

      layer^.access_method := bav$magnetic_tape_device_faps [block_type] [record_type];

      static_label^.block_type := block_type;
      static_label^.block_type_source := amc$local_file_information;

      static_label^.record_type := record_type;
      static_label^.record_type_source := amc$local_file_information;

    PROCEND change_block_and_record_type;
?? OLDTITLE ??
?? EJECT ??
    status.normal := TRUE;
    file_instance_p := baf$task_file_entry_p (file_identifier);
    IF file_instance_p = NIL THEN
      osp$set_status_abnormal (amc$access_method_id, ame$improper_file_id, interface_name, status);
      RETURN; {----->
    IFEND;

    IF (file_instance_p^.fap_control_information.fap_array = NIL) AND (layer_number = 0) THEN
      change_block_and_record_type (block_type, record_type,
            ^file_instance_p^.fap_control_information.first_fap,
            ^file_instance_p^.instance_attributes.static_label);
    ELSEIF (file_instance_p^.fap_control_information.fap_array <> NIL) AND
          (layer_number <= UPPERBOUND (file_instance_p^.fap_control_information.fap_array^)) THEN
      change_block_and_record_type (block_type, record_type,
            ^file_instance_p^.fap_control_information.fap_array^ [layer_number],
            ^file_instance_p^.instance_attributes.static_label);
      IF layer_number = 0 THEN
        change_block_and_record_type (block_type, record_type,
              ^file_instance_p^.fap_control_information.first_fap,
              ^file_instance_p^.instance_attributes.static_label);
      IFEND;
    ELSE
      osp$set_status_abnormal (amc$access_method_id, ame$improper_layer_number, interface_name, status);
    IFEND;

  PROCEND bap$change_tape_bt_and_rt;
?? OLDTITLE ??
MODEND bam$change_tape_bt_and_rt;
