?? NEWTITLE := 'NOS/VE Basic_Access_method : Null Device' ??
MODULE bam$null_device;
?? RIGHT := 110 ??

?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc amc$condition_code_limits
*copyc ame$fap_validation_errors
*copyc ame$get_program_actions
*copyc ame$improper_file_id
*copyc ame$segment_validation_errors
*copyc ame$skip_program_actions
*copyc ame$unimplemented_request
*copyc amt$fap_declarations
*copyc amt$file_identifier
*copyc ost$status
?? POP ??
*copyc amp$access_method
*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$store
*copyc clp$convert_integer_to_string
*copyc osp$set_status_abnormal
*copyc bav$task_file_table
?? OLDTITLE ??
?? NEWTITLE := '[xdcl, #gate] BAP$NULL_DEVICE', EJECT ??
*copyc bah$null_device

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

    VAR
      count_str: ost$string,
      file_instance: ^bat$task_file_entry;

    status.normal := TRUE;
    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, 'BAP$NULL_DEVICE', status);
      RETURN; {----->
    IFEND;

    CASE call_block.operation OF
    = amc$get_next_req =
      call_block.getn.transfer_count^ := 0;
      call_block.getn.byte_address^ := 0;
      call_block.getn.file_position^ := amc$eoi;
      IF file_instance^.global_file_information^.positioning_info.record_info.file_position = amc$eoi THEN
        amp$set_file_instance_abnormal (file_identifier, ame$input_after_eoi, call_block.operation, '',
              status);
      ELSE
        file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$eoi;
      IFEND;

    = amc$get_partial_req =
      call_block.getp.record_length^ := 0;
      call_block.getp.transfer_count^ := 0;
      call_block.getp.byte_address^ := 0;
      call_block.getp.file_position^ := amc$eoi;
      IF file_instance^.global_file_information^.positioning_info.record_info.file_position = amc$eoi THEN
        amp$set_file_instance_abnormal (file_identifier, ame$input_after_eoi, call_block.operation, '',
              status);
      ELSE
        file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$eoi;
      IFEND;

    = amc$get_direct_req =
      call_block.getd.transfer_count^ := 0;
      call_block.getd.file_position^ := amc$eoi;
      IF file_instance^.global_file_information^.positioning_info.record_info.file_position = amc$eoi THEN
        amp$set_file_instance_abnormal (file_identifier, ame$input_after_eoi, call_block.operation, '',
              status);
      ELSE
        file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$eoi;
      IFEND;

    = amc$get_segment_pointer_req =
      call_block.getsegp.segment_pointer^.kind := call_block.getsegp.pointer_kind;

      CASE call_block.getsegp.pointer_kind OF
      = amc$cell_pointer =
        call_block.getsegp.segment_pointer^.cell_pointer := NIL;
      = amc$heap_pointer =
        call_block.getsegp.segment_pointer^.heap_pointer := NIL;
      = amc$sequence_pointer =
        call_block.getsegp.segment_pointer^.sequence_pointer := NIL;
      ELSE
        amp$set_file_instance_abnormal (file_identifier, ame$improper_pointer_kind,
              amc$get_segment_pointer_req, ' ', status);
      CASEND;

    = amc$put_next_req =
      call_block.putn.byte_address^ := 0;
      file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$eor;

    = amc$put_partial_req =
      call_block.putp.byte_address^ := 0;
      CASE call_block.putp.term_option OF
      = amc$start, amc$continue =
        file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$mid_record;
      ELSE
        file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$eor;
      CASEND;

    = amc$put_direct_req =
      file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$eor;

    = amc$skip_req =
      clp$convert_integer_to_string (call_block.skp.count, 10, FALSE, count_str, status);
      CASE call_block.skp.direction OF
      = amc$forward =
        call_block.skp.file_position^ := amc$eoi;
        file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$eoi;
        file_instance^.residual_skip_count := call_block.skp.count;
        amp$set_file_instance_abnormal (file_identifier, ame$skip_encountered_eoi, call_block.operation,
              count_str.value (1, count_str.size), status);
      ELSE
        call_block.skp.file_position^ := amc$boi;
        file_instance^.global_file_information^.positioning_info.record_info.file_position := amc$boi;
        file_instance^.residual_skip_count := call_block.skp.count;
        amp$set_file_instance_abnormal (file_identifier, ame$skip_encountered_boi, call_block.operation,
              count_str.value (1, count_str.size), status);
      CASEND;

    = amc$open_req, amc$flush_req, amc$write_tape_mark_req, amc$seek_direct_req, amc$pack_block_req,
          amc$pack_record_req, amc$unpack_block_req, amc$unpack_record_req, amc$rewind_req,
          amc$set_segment_eoi_req, amc$set_segment_position_req, amc$write_end_partition_req,
          amc$replace_req =
      ;

    = amc$close_req =
      bap$close (file_identifier, status);

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

    = amc$fetch_req =
      bap$fetch (file_identifier, call_block, layer_number, status);

    = amc$fetch_access_information_rq =
      bap$fetch_access_information (file_identifier, call_block, layer_number, status);

    ELSE
      amp$set_file_instance_abnormal (file_identifier, ame$unimplemented_request, call_block.operation,
            'for null device files', status);
    CASEND;

    IF call_block.operation <> amc$close_req THEN
      IF call_block.operation <> amc$fetch_access_information_rq THEN
        file_instance^.global_file_information^.last_access_operation := call_block.operation;
      IFEND;

      IF status.normal THEN
        file_instance^.global_file_information^.error_status := 0;
      ELSE
        file_instance^.global_file_information^.error_status := status.condition;
      IFEND;
    IFEND;

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