
  TYPE
    nlt$bm_allocated_buffer_pool = array [ nlt$bm_pool_index ] of nlt$bm_allocated_pool_descr,

    nlt$bm_allocated_pool_descr = record
      last_lowest_available_sub_pool: 1 .. 0ffff(16), { Indicates the search starting point.
      highest_allocated_sub_pool: 1 .. 0ffff(16), { Indicates the ending point.
      buffer_length: nlt$bm_buffer_length,
      sub_pool_allocation_size: nlt$bm_buffer_count, { Number of buffers per sub pool.
      sub_pool: ^array [1 .. * ] of nlt$bm_allocatd_buffer_sub_pool, { 100 large and 200 small sub pools.
    recend,

    nlt$bm_allocatd_buffer_sub_pool = record
      head: ^nlt$bm_message_descriptor,            { Points to the first buffer.
      allocated_memory: ^nlt$bm_allocated_memory,   { Points to the allocated memory block.
      count: 0 .. 0ff(16),                          { Number of available descriptors queued.
    recend;

*copyc nlt$bm_allocated_memory
*copyc nlt$bm_buffer_count
*copyc nlt$bm_message_descriptor
*copyc nlt$bm_pool_index

