  PROCEDURE [INLINE] osp$establish_condition_handler
    (    condition_handler: pmt$condition_handler;
         block_exit: boolean);

?? PUSH (LISTEXT := ON) ??

*IF NOT $true(osv$unix)

    VAR
      stack_frame_word: pmt$os_stack_frame_word,
      os_stack_frame_word: ^pmt$os_stack_frame_word,
      osv$default_establish_desc: [XREF] pmt$established_handler,
      establish_descriptor: ^pmt$established_handler;

    PUSH establish_descriptor;

    os_stack_frame_word := #CURRENT_STACK_FRAME ();

    establish_descriptor^ := osv$default_establish_desc;
    establish_descriptor^.handler := condition_handler;
    stack_frame_word.established_handler := establish_descriptor;
    stack_frame_word.terminate_inhibit_frame := FALSE;
    stack_frame_word.block_exit_frame := FALSE;
    stack_frame_word.debug_cff_frame := FALSE;
    stack_frame_word.ada_critical_frame := FALSE;
    stack_frame_word.ada_critical_frame_count := 0;
    os_stack_frame_word^ := stack_frame_word;

    IF block_exit THEN
      establish_descriptor^.established_conditions.combination :=
            establish_descriptor^.established_conditions.combination +
            $pmt$condition_combination [pmc$block_exit_processing];
      os_stack_frame_word^.block_exit_frame := TRUE;
      #WRITE_REGISTER (osc$pr_set_critical_frame, osc$pr_set_critical_frame);
    IFEND;

    #WRITE_REGISTER (osc$pr_set_on_condition, osc$pr_set_on_condition);

*IFEND

  PROCEND osp$establish_condition_handler;

*copy osh$establish_condition_handler

*copyc pmt$condition
*copyc pmt$condition_handler
*copyc pmt$established_handler
*copyc osc$processor_defined_registers
*copyc ost$stack_frame_save_area
*copyc pmt$os_stack_frame_word
?? POP ??

