?? EJECT ??
  PROCEDURE [INLINE]  rfp$reserve_wired_buffers(VAR reserved_buffers: rft$buffer_list;
                                                VAR buffer_count: rft$buffer_count);

{    The purpose of this request is to call the NAM/VE buffer manager to obtain
{    a list of buffers in the network wired section.
{
{    reserved_buffers: (output) This parameter specifies the array of buffers reserved.
{      Upon return a pointer to each of the reserved buffers is returned in this array.
{
{    buffer_count: (input, output) This parameter specifies the number of buffers to
{      reserve.  Upon output this parameter specifies the number of buffers actually
{      reserved.

    VAR
        buffer_list_array: nlt$bm_buffer_list_array,
        buffers_acquired: BOOLEAN,
        buffers_allowed: rft$network_wired_buffer_count,
        buffers_requested: rft$buffer_count,
        index: rft$buffer_count;


    rfp$lock_table (rfv$network_wired_buffers.lock);
    buffers_allowed := rfv$network_wired_buffers.maximum_buffers -
          rfv$network_wired_buffers.current_buffers;
    IF buffer_count > buffers_allowed THEN
      buffer_count := buffers_allowed;
    IFEND;
    rfv$network_wired_buffers.current_buffers := rfv$network_wired_buffers.current_buffers +
          buffer_count;
    rfp$unlock_table (rfv$network_wired_buffers.lock);
    buffers_requested := buffer_count;

    IF buffer_count > 0 THEN
      FOR index := LOWERBOUND (buffer_list_array) TO UPPERBOUND (buffer_list_array) DO
        buffer_list_array [index].count := 0;
        buffer_list_array [index].buffer_list := NIL;
      FOREND;
      buffer_list_array [nlc$bm_large_buffer_index].count := buffer_count;
      PUSH  buffer_list_array [nlc$bm_large_buffer_index].buffer_list : [1..buffer_count];

      nlp$bm_get_buffer_list(buffer_list_array, buffers_acquired);

      IF  buffers_acquired  THEN
        buffer_count := buffer_list_array [nlc$bm_large_buffer_index].count;

        FOR  index := 1 TO buffer_count  DO
          reserved_buffers[index].length := nlv$bm_large_buffer_size;
          reserved_buffers[index].byte_count := 0;
          reserved_buffers[index].current_offset := 0;
          reserved_buffers[index].descriptor := buffer_list_array [nlc$bm_large_buffer_index].
                buffer_list^[index];
          reserved_buffers[index].buffer := buffer_list_array [nlc$bm_large_buffer_index].
                buffer_list^[index]^.container;
        FOREND;
      ELSE
        buffer_count := 0;
      IFEND;
      IF buffer_count <> buffers_requested THEN
        rfp$lock_table (rfv$network_wired_buffers.lock);
        rfv$network_wired_buffers.current_buffers := rfv$network_wired_buffers.current_buffers -
              (buffers_requested - buffer_count);
        rfp$unlock_table (rfv$network_wired_buffers.lock);
      IFEND;
    IFEND;

  PROCEND rfp$reserve_wired_buffers;
?? PUSH (LISTEXT := ON) ??
*copyc nlt$bm_buffer_list_array
*copyc rft$r1_interface_defs
*copyc nlp$bm_get_buffer_list
*copyc nlv$bm_large_buffer_size
*copyc rfv$network_wired_buffers
?? POP ??
