*copyc osd$default_pragmats
?? TITLE := 'RHFAM/VE: rfm$network_fap' ??
?? NEWTITLE := 'Ring Brackets 23D' ??
MODULE rfm$network_fap;
?? NEWTITLE := '  Global Declarations', EJECT ??
?? NEWTITLE := '    Type/Constant Definitions' ??
?? PUSH (LISTEXT := ON) ??
*copyc ame$device_class_validation
*copyc ame$improper_file_id
*copyc ame$unimplemented_request
*copyc amt$call_block
*copyc amt$fap_declarations
*copyc ost$caller_identifier
*copyc ost$status
?? POP ??
?? OLDTITLE ??
?? NEWTITLE := '    External Procedures', EJECT ??
*copyc amp$set_file_instance_abnormal
*copyc amp$validate_caller_privilege
*copyc bap$close
*copyc bap$fetch
*copyc bap$fetch_access_information
*copyc bap$store
*copyc bap$validate_file_identifier
*copyc osp$set_status_abnormal
*copyc rfp$close_file
*copyc rfp$open_file
?? OLDTITLE ??
?? NEWTITLE := '    rfp$network_fap', EJECT ??

  PROCEDURE [XDCL, #GATE] rfp$network_fap (file_identifier: amt$file_identifier;
        call_block: amt$call_block;
        layer: amt$fap_layer_number;
    VAR status: ost$status);


    VAR
      caller_id: ost$caller_identifier,
      file_instance: ^bat$task_file_entry,
      ignore_structure_pointer: ^cell,
      validation_ok: boolean,
      ignore_status: ost$status;

    #caller_id (caller_id);

    status.normal := TRUE;

    bap$validate_file_identifier (file_identifier, file_instance, validation_ok);
    IF NOT validation_ok THEN
      amp$set_file_instance_abnormal (file_identifier, ame$improper_file_id, call_block.operation,
        'INVALID FILE_IDENTIFIER IN rfp$network_fap', status);
    ELSE

      CASE call_block.operation OF
      = amc$open_req =
        rfp$open_file (file_identifier, layer, call_block, status);
      = amc$close_req =
        rfp$close_file (file_identifier, layer, call_block, status);
        bap$close (file_identifier, status);
      = amc$fetch_access_information_rq =
        amp$validate_caller_privilege (file_identifier, call_block, layer, $pft$usage_selections
              [], caller_id.ring, ignore_structure_pointer, status);
        IF status.normal THEN
          bap$fetch_access_information (file_identifier, call_block, layer, status);
        IFEND;
      = amc$fetch_req =
        amp$validate_caller_privilege (file_identifier, call_block, layer, $pft$usage_selections
              [], caller_id.ring, ignore_structure_pointer, status);
        IF status.normal THEN
          bap$fetch (file_identifier, call_block, layer, status);
        IFEND;
      = amc$store_req =
        bap$store (file_identifier, call_block, layer, status);
      = amc$flush_req, amc$rewind_req, amc$skip_req, amc$write_end_partition_req =
        ; {ignore request (return normal status)
      ELSE
        ; {invalid request (return bad status)
        amp$set_file_instance_abnormal (file_identifier, ame$unimplemented_request, call_block.operation,
          'for network device files', status);
      CASEND;
    IFEND;

    file_instance^.global_file_information^.last_access_operation := call_block.operation;
    IF status.normal THEN
      file_instance^.global_file_information^.error_status := 0;
    ELSE
      file_instance^.global_file_information^.error_status := status.condition;
    IFEND;
  PROCEND rfp$network_fap;

MODEND rfm$network_fap;
