<> <> <<>> DIRECTORY Buttons, ButtonsImpl, MBQueueImpl, Rope, Unclean, ViewerOps; UncleanImpl: CEDAR PROGRAM IMPORTS ButtonsImpl, MBQueueImpl, ViewerOps EXPORTS Unclean SHARES ButtonsImpl, MBQueueImpl = { SwapQueuedButtonProcs: PUBLIC PROC[buttonName: Rope.ROPE, miscreant: Buttons.ButtonProc] RETURNS[realProc: Buttons.ButtonProc_NIL] = { button: Buttons.Button = ViewerOps.FindViewer[buttonName]; buttonData: ButtonsImpl.ButtonData; clickInfo: MBQueueImpl.MyClickInfo; IF button=NIL THEN RETURN; buttonData _ NARROW[button.data]; IF buttonData=NIL THEN RETURN; clickInfo _ NARROW[buttonData.clientData]; IF clickInfo=NIL THEN RETURN; realProc_clickInfo.proc; clickInfo.proc _ miscreant; }; }.