    { initialize positioning information }
    CASE file_instance^.instance_attributes.dynamic_label.open_position OF
    = amc$open_at_boi =
        file_byte_address := 0;
        { initialize file_transfer_descriptor }
        file_instance^.file_transfer_descriptor.bor_address := 0;
        file_instance^.file_transfer_descriptor.current_byte_address := 0;
        file_instance^.file_transfer_descriptor.eoi_byte_address :=
              file_instance^.global_file_information^.eoi_byte_address;
        file_instance^.file_transfer_descriptor.file_position := amc$boi;
        file_instance^.file_transfer_descriptor.record_header_fba := 0;

        { initialize file_transfer_descriptor.file_information }
        file_instance^.file_transfer_descriptor.file_info.current_record_byte_address := 0;
        file_instance^.file_transfer_descriptor.file_info.rch_file_byte_address := 0;
        file_instance^.file_transfer_descriptor.file_info.rch_previous_length := 0;
        file_instance^.file_transfer_descriptor.file_info.record_length := 0;
        file_instance^.file_transfer_descriptor.file_info.residual_record_length := 0;
        file_instance^.file_transfer_descriptor.file_info.residual_skip_count := 0;
        file_instance^.file_transfer_descriptor.file_info.requested_record_length := 0;
        file_instance^.file_transfer_descriptor.file_info.transfer_count := 0;

        { initialize file_transfer_descriptor.block_descriptor }
        file_instance^.file_transfer_descriptor.block_descriptor^.block_number := 1;
        file_instance^.file_transfer_descriptor.block_descriptor^.block_position := bac$beginning_of_block;
        file_instance^.file_transfer_descriptor.block_descriptor^.current_block_byte_address := 0;
        file_instance^.file_transfer_descriptor.block_descriptor^.previous_block_header_fba := 0;
        file_instance^.file_transfer_descriptor.block_descriptor^.residual_block_length := 0;
        file_instance^.file_transfer_descriptor.block_descriptor^.
              current_block_length := 0;
        osp$fetch_locked_variable (file_instance^.global_file_information^.open_count, x);
        { x = open_count }
        IF x = 1 THEN
        file_instance^.global_file_information^.record_length := 0;
        file_instance^.global_file_information^.residual_record_length := 0;
        file_instance^.global_file_information^.transfer_count := 0;
        file_instance^.global_file_information^.bor_address := 0;
        file_instance^.global_file_information^.block_number := 1;
        file_instance^.global_file_information^.record_header_fba := 0;
        file_instance^.global_file_information^.file_position := amc$boi;
        file_instance^.global_file_information^.block_position := bac$beginning_of_block;
        file_instance^.global_file_information^.block_header_fba := 0;
        file_instance^.global_file_information^.current_byte_address := 0;
        file_instance^.global_file_information^.file_position := amc$boi;
        file_instance^.global_file_information^.previous_block_header_fba := 0;
        file_instance^.global_file_information^.record_header_fba := 0;
        file_instance^.global_file_information^.residual_block_length := 0;

      IFEND;
    = amc$open_no_positioning, amc$open_at_bop =
        file_byte_address := file_instance^.global_file_information^.current_byte_address;
        { initialize file_transfer_descriptor }
        bai$update_ftd_from_gfi;

        { initialize file_transfer_descriptor.block_descriptor }
        bai$update_ftd_blk_from_gfi;

    = amc$open_at_eoi =
        file_byte_address := file_instance^.global_file_information^.eoi_byte_address;
        { initialize file_transfer_descriptor }
        file_instance^.file_transfer_descriptor.bor_address := 0;
          { bor_address should be recalculated if necessary in each fap }
        file_instance^.file_transfer_descriptor.current_byte_address := file_byte_address;
        file_instance^.file_transfer_descriptor.eoi_byte_address := file_byte_address;
        file_instance^.file_transfer_descriptor.file_position := amc$eoi;
        file_instance^.file_transfer_descriptor.record_header_fba := 0;
          { record_header_fba should be recalculated in variable record faps }

        { initialize file_transfer_descriptor.file_information }
        file_instance^.file_transfer_descriptor.file_info.current_record_byte_address := 0;
          { crba should be recalculated in each fap }
        file_instance^.file_transfer_descriptor.file_info.rch_file_byte_address := 0;
        file_instance^.file_transfer_descriptor.file_info.rch_previous_length := 0;
        file_instance^.file_transfer_descriptor.file_info.record_length := 0;
        file_instance^.file_transfer_descriptor.file_info.residual_record_length := 0;
        file_instance^.file_transfer_descriptor.file_info.residual_skip_count := 0;
        file_instance^.file_transfer_descriptor.file_info.requested_record_length := 0;
        file_instance^.file_transfer_descriptor.file_info.transfer_count := 0;

        { initialize file_transfer_descriptor.block_descriptor }
        bai$update_ftd_blk_from_fba;
        bai$update_gfi_from_ftd;
        bai$update_gfi_blk_from_ftd;
          { each fap must set current_block_length after validating block_header }
    CASEND;

