?? TITLE := 'NOS/VE:  BASIC ACCESS METHOD, TASK SERVICES' ??
MODULE bam$control;
?? RIGHT := 110 ??

?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc ame$conflicting_access_level
*copyc ame$device_class_validation
*copyc ame$improper_file_id
*copyc ame$unimplemented_request
*copyc ife$error_codes
*copyc amt$fap_declarations
?? POP ??
*copyc pmf$job_mode
*copyc amp$set_file_instance_abnormal
*copyc baf$task_file_entry_p
*copyc bap$close
*copyc bap$fetch
*copyc bap$fetch_access_information
*copyc bap$get_segment_pointer
*copyc bap$rewind
*copyc bap$set_segment_eoi
*copyc bap$set_segment_position
*copyc bap$store
*copyc bap$write_modified_pages
*copyc osp$set_status_abnormal
*copyc bav$task_file_table
?? NEWTITLE := '[xdcl, #gate] BAP$FAP_CONTROL', EJECT ??

  PROCEDURE [XDCL, #GATE] bap$fap_control
    (    file_identifier: amt$file_identifier;
         call_block: amt$call_block;
         layer_number: amt$fap_layer_number;
     VAR status: ost$status);

    CONST
      error_text = 'BAP$FAP_CONTROL ';

    VAR
      file_instance: ^bat$task_file_entry,
      status_condition: ost$status_condition;

    file_instance := baf$task_file_entry_p (file_identifier);
    IF file_instance = NIL THEN
      osp$set_status_abnormal (amc$access_method_id, ame$improper_file_id, error_text, status);
      RETURN; {----->
    IFEND;

    CASE call_block.operation OF
    = amc$close_req =
      bap$close (file_identifier, status);
      RETURN; {----->

    = amc$fetch_access_information_rq =
      bap$fetch_access_information (file_identifier, call_block, layer_number, status);
      RETURN; {----->

    = amc$fetch_req =
      bap$fetch (file_identifier, call_block, layer_number, status);
      RETURN; {----->

    = amc$flush_req =
      bap$write_modified_pages (file_instance, file_identifier, status);

    = amc$get_segment_pointer_req =
      bap$get_segment_pointer (file_identifier, call_block, layer_number, status);

    = amc$rewind_req =
      bap$rewind (file_identifier, call_block, layer_number, status);

    = amc$set_segment_eoi_req =
      bap$set_segment_eoi (file_identifier, call_block, layer_number, status);

    = amc$set_segment_position_req =
      bap$set_segment_position (file_identifier, call_block, layer_number, status);

    = amc$store_req =
      bap$store (file_identifier, call_block, layer_number, status);

    = amc$open_req =
      ;
    = amc$get_next_req, amc$put_next_req, amc$get_partial_req, amc$put_partial_req,
          amc$write_end_partition_req, amc$skip_req, amc$write_tape_mark_req, amc$seek_direct_req,
          amc$get_direct_req, amc$put_direct_req, amc$replace_req, amc$close_volume_req =
      IF file_instance^.access_level <> amc$record THEN
        amp$set_file_instance_abnormal (file_identifier, ame$conflicting_access_level, call_block.operation,
              error_text, status);
        RETURN; {----->
      IFEND;

    = ifc$fetch_terminal_req, ifc$store_terminal_req =
      IF pmf$job_mode () = jmc$batch THEN
        osp$set_status_abnormal (ifc$interactive_facility_id, ife$current_job_not_interactive,
              ' FETCH/STORE_TERMINAL_REQ', status);
      ELSE
        amp$set_file_instance_abnormal (file_identifier, ame$improper_device_class, call_block.operation,
              ' NON TERMINAL ', status);
      IFEND;

    ELSE
      amp$set_file_instance_abnormal (file_identifier, ame$unimplemented_request, call_block.operation, '',
            status);
      RETURN; {----->
    CASEND;

    IF NOT status.normal THEN
      status_condition := status.condition;
    ELSE
      status_condition := 0;
    IFEND;

    IF file_instance^.private_read_information = NIL THEN
      file_instance^.global_file_information^.last_access_operation := call_block.operation;
      file_instance^.global_file_information^.error_status := status_condition;
    ELSE
      file_instance^.private_read_information^.last_access_operation := call_block.operation;
      file_instance^.private_read_information^.error_status := status_condition;
    IFEND;

  PROCEND bap$fap_control;
?? OLDTITLE ??
MODEND bam$control;
