
  FUNCTION [INLINE] bap$next_position_is_bos
    (    file_set_position: fst$tape_file_set_position;
         tape_descriptor_p: ^bat$tape_descriptor;
         last_accessed_file_identifier: string (17);
         last_accessed_generation_number: 1 .. 9999): boolean;

{ This function determines whether the next position is the beginning of the
{ volume set, i.e loadpoint of the first volume in the volume set.

?? PUSH (LISTEXT := ON) ??
?? RIGHT := 110 ??

    VAR
      blank: boolean;

    blank := (tape_descriptor_p^.initial_volume.header_labels <> NIL) AND
          (tape_descriptor_p^.initial_volume.classification.volume_label_type = rmc$labeled_volume_type) AND
          tape_descriptor_p^.initial_volume.classification.labeled.blank;

    IF blank THEN
      bap$next_position_is_bos := TRUE;
      RETURN; {----->
    IFEND;

    bap$next_position_is_bos := FALSE;
    CASE file_set_position.position OF

    = fsc$tape_beginning_of_set =
      bap$next_position_is_bos := TRUE;

    = fsc$tape_current_file =
      CASE tape_descriptor_p^.labeled_volume_position OF
      = bac$lvp_after_trailer_labels, bac$lvp_end_of_file_set, bac$lvp_end_of_volume_list =
        IF tape_descriptor_p^.next_position.file_sequence_number = 2 THEN
          bap$next_position_is_bos := TRUE;
        IFEND;
      ELSE
        IF tape_descriptor_p^.next_position.file_sequence_number = 1 THEN
          bap$next_position_is_bos := TRUE;
        IFEND;
      CASEND;

    = fsc$tape_file_identifier_pos =
      IF (file_set_position.file_identifier = last_accessed_file_identifier) AND
            (file_set_position.generation_number = last_accessed_generation_number) THEN

        CASE tape_descriptor_p^.labeled_volume_position OF
        = bac$lvp_after_trailer_labels, bac$lvp_end_of_file_set, bac$lvp_end_of_volume_list =
          IF tape_descriptor_p^.next_position.file_sequence_number = 2 THEN
            bap$next_position_is_bos := TRUE;
          IFEND;
        ELSE
          IF tape_descriptor_p^.next_position.file_sequence_number = 1 THEN
            bap$next_position_is_bos := TRUE;
          IFEND;
        CASEND;
      IFEND;

    = fsc$tape_file_sequence_pos =
      IF file_set_position.file_sequence_number = 1 THEN
        bap$next_position_is_bos := TRUE;
      IFEND;

    = fsc$tape_next_file =
      IF tape_descriptor_p^.labeled_volume_position = bac$lvp_beginning_of_file_set THEN
        bap$next_position_is_bos := TRUE;
      IFEND;

    ELSE {fsc$tape_end_of_set}
    CASEND;

  FUNCEND bap$next_position_is_bos;

*copyc bat$tape_descriptor
*copyc fst$tape_file_set_position
?? POP ??
