<<>> <> <> <> <> <> <> DIRECTORY KeyTypes, ViewersWorldRefType; IdleBackdoor: CEDAR DEFINITIONS = { Activity: TYPE ~ {idle, loggingIn, unidle}; FullIdleHandler: TYPE ~ PROC [data: REF ANY, old, new: Activity]; IdleRegistration: TYPE = REF; RegisterFullIdleHandler: PROC [handler: FullIdleHandler, data: REF ¬ NIL] RETURNS [IdleRegistration]; UnregisterFullIdleHandler: PROC [registration: IdleRegistration]; DoASleep: PROC; <<= TestAndSet[{RETURN [idle, loggingIn=>wait, unidle=>idle]}]>> WaitForIdle: PROC [idle: BOOL]; <> Animator: TYPE ~ REF AnimatorPrivate; AnimatorPrivate: TYPE ~ RECORD [ Animate: PROC [world: ViewersWorldRefType.Ref, ShouldReturn: PROC [watch: KeyFilter] RETURNS [BOOL], data: REF ANY ¬ NIL], data: REF ANY ¬ NIL ]; defaultAnimator: READONLY Animator; GetAnimator: PROC RETURNS [Animator]; SetAnimator: PROC [a: Animator]; <> PushAnimator: PROC [a: Animator]; PopAnimator: PROC; KeyCode: TYPE = KeyTypes.KeyCode; KeyFilter: TYPE = RECORD [ first, last: KeyTypes.KeyCode, pass: PACKED ARRAY KeyTypes.KeyCode OF BOOL <> ]; defaultKeyFilter: READONLY KeyFilter; }.