
  PROCEDURE [INLINE] nlp$bm_build_pva_list
    (    message_id: nlt$bm_message_id;
     VAR pva_list: ^nat$data_fragments);

?? PUSH (LISTEXT := ON) ??

    VAR
      data_fragment_p: ^nat$data_fragment,
      descriptor: ^nlt$bm_message_descriptor,
      i: integer,
      number_of_messages: integer,
      ring: 1 .. 15,
      segment: 0 .. 0fff(16);

    descriptor := message_id.descriptor;
    number_of_messages := 0;

    REPEAT
      IF (descriptor^.container_length - descriptor^.data_start) > 0 THEN
        number_of_messages := number_of_messages + 1;
      IFEND;
      descriptor := descriptor^.link;
    UNTIL descriptor = NIL;

    PUSH pva_list: [1 .. number_of_messages];
    descriptor := message_id.descriptor;
    ring := #RING (descriptor^.container);
    segment := #SEGMENT (descriptor^.container);
    i := 1;
    REPEAT
      IF (descriptor^.container_length - descriptor^.data_start) > 0 THEN
        data_fragment_p := ^pva_list^ [i];
        data_fragment_p^.length := descriptor^.container_length -
              descriptor^.data_start;
        data_fragment_p^.address := #ADDRESS (ring, segment,
              #OFFSET (descriptor^.container) + descriptor^.data_start);
        i := i + 1;
      IFEND;
      descriptor := descriptor^.link;
    UNTIL (i > number_of_messages);

  PROCEND nlp$bm_build_pva_list;

*copyc nlh$bm_build_pva_list

*copyc nat$data_fragments
*copyc nlt$bm_message_id
?? POP ??
