
  PROCEDURE [INLINE] dsp$convert_r_pointer_to_seq_p
    (    r_pointer: dst$r_pointer;
         base_p: ^cell;
     VAR seq_p: ^SEQ ( * ));

?? PUSH (LISTEXT := ON) ??

{ PURPOSE:
{   The purpose of this procedure is to convert a R pointer to a sequence pointer.

    VAR
      adjusted_pva_p: ^cell,
      base_rma: integer,
      r_pointer_rma: integer,
      seq_entry_pp: ^^SEQ ( * ),
      seq_header: cyt$sequence_pointer;

    { The r_pointer contains: offset, r_upper, r_lower, length
    { rma of r_pointer := r_upper*10000000(8) + r_lower*1000(8) + offset*10(8)

    r_pointer_rma := r_pointer.rupper * 10000000(8) + r_pointer.rlower * 1000(8) + r_pointer.offset * 10(8);

    i#real_memory_address (base_p, base_rma);
    adjusted_pva_p := #ADDRESS (#RING (base_p), #SEGMENT (base_p),
          ((r_pointer_rma - base_rma) + #OFFSET (base_p)));

    seq_entry_pp := #LOC (seq_header);
    seq_header.pva := adjusted_pva_p;
    seq_header.length := r_pointer.length * 8;
    seq_header.nextt := 0;
    seq_p := seq_entry_pp^;
    RESET seq_p;

  PROCEND dsp$convert_r_pointer_to_seq_p;

*copyc cyd$cybil_structure_definitions
*copyc dst$r_pointer
*copyc i#real_memory_address
?? POP ??
