When mouse down event received:
    While pending button events:
	If appropriate mouse button up event:
	    If distance between events less than numb_radius:
		Return no_selection.
	    Else:
		Return selection specified by angle between events.
	Else:
	    Return no_selection.
    If menu doesn't fit on screen:
	Calculate offset to move menu back on screen.
	Center menu on location of mouse down event plus offset.
	Warp mouse to current mouse location plus offset.
    Else:
	Center menu on location of mouse down event.
    Draw menu.
    Repeat:
	If distance between mouse down event and current mouse
	location not less than numb_radius:
	    Unhighlight currently highlighted selection, if any.
	    Highlight selection specified by angle between the two.
    Until mouse button event.
    Erase menu.
    If appropriate mouse button up event:
	If distance between events less than numb_radius:
	    Return no_selection.
	Else:
	    Return selection specified by angle between events.
    Else:
	Return no_selection.