
  PROCEDURE [INLINE] bap$determine_loaded_ring
    (    pointer_to_procedure: ^procedure;
     VAR loaded_ring: ost$valid_ring;
     VAR r3: ost$valid_ring);

?? PUSH (LISTEXT := ON) ??
?? RIGHT := 110 ??

    VAR
      first_conversion: record
        case boolean of
        = TRUE =
          procedure_pointer: ^procedure,
        = FALSE =
          code_base_pointer: ^ost$external_code_base_pointer,
        casend,
      recend,

      second_conversion: record
        case boolean of
        = TRUE =
          code_base_pva: ^cell,
        = FALSE =
          pva_record: ^ost$pva,
        casend,
      recend;

    first_conversion.procedure_pointer := pointer_to_procedure;
    r3 := first_conversion.code_base_pointer^.r3;

    { This is to get the loaded ring of the fap, not the apd intercept procedure. }
    IF #RING (first_conversion.code_base_pointer^.code_pva) = 2 THEN
      first_conversion.code_base_pointer := first_conversion.code_base_pointer^.binding_pva;
    IFEND;

    second_conversion.code_base_pva := ^first_conversion.code_base_pointer^.code_pva;
    loaded_ring := second_conversion.pva_record^.ring;

  PROCEND bap$determine_loaded_ring;

*copyc osd$virtual_address
*copyc osd$code_base_pointer
?? POP ??
