?? NEWTITLE := 'NOS/VE :  ADVANCED ACCESS METHOD, RING 4DD' ??
MODULE amm$access_method;
?? RIGHT := 110 ??

*copyc amh$also

?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc amc$condition_code_limits
*copyc ame$fap_validation_errors
*copyc ame$improper_file_id
*copyc amt$call_block
*copyc amt$fap_layer_number
*copyc amt$fap_pointer
?? POP ??
*copyc baf$task_file_entry_p
*copyc bap$fap_control
*copyc bap$mark_fap_layer_closed
*copyc bap$mark_fap_layer_open
*copyc osp$copy_local_status_to_status
*copyc osp$set_status_abnormal
?? OLDTITLE ??
?? NEWTITLE := '  [XDCL] AMP$ACCESS_METHOD', EJECT ??
*copyc amh$access_method

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

    CONST
      interface_name = 'AMP$ACCESS_METHOD';

    VAR
      fap_layer_number: amt$fap_layer_number,
      file_instance_p: ^bat$task_file_entry;

    status.normal := TRUE;
    file_instance_p := baf$task_file_entry_p (file_identifier);
    IF file_instance_p = NIL THEN
      osp$set_status_abnormal (amc$access_method_id, ame$improper_file_id, interface_name, status);
      RETURN; {----->
    IFEND;

    IF (file_instance_p^.fap_control_information.fap_array = NIL) AND (layer_number = 0) THEN
      bap$fap_control (file_identifier, call_block, {layer_number} 1, status);

    ELSEIF (file_instance_p^.fap_control_information.fap_array <> NIL) AND
          (layer_number < UPPERBOUND (file_instance_p^.fap_control_information.fap_array^)) THEN
      fap_layer_number := layer_number + 1;
      CASE call_block.operation OF
      = amc$open_req =
        bap$mark_fap_layer_open (file_identifier, fap_layer_number, status);
      = amc$close_req =
        bap$mark_fap_layer_closed (file_identifier, fap_layer_number, status);
      ELSE
      CASEND;
      file_instance_p^.fap_control_information.fap_array^ [fap_layer_number].
            access_method^ (file_identifier, call_block, fap_layer_number, status);

    ELSEIF (file_instance_p^.fap_control_information.fap_array <> NIL) AND
          (layer_number = UPPERBOUND (file_instance_p^.fap_control_information.fap_array^)) THEN
      bap$fap_control (file_identifier, call_block, layer_number + 1, status);

    ELSE
      osp$set_status_abnormal (amc$access_method_id, ame$improper_layer_number, interface_name, status);
    IFEND;

  PROCEND amp$access_method;
?? OLDTITLE ??
MODEND amm$access_method;
