implementation module receiverevent import StdBool import deviceevents, iostate, /*MW11*/ clCrossCall_12 from StdPSt import accPIO /* receiverEvent filters the appropriate events for the receiver device. These are only the message events (as long as receivers do not contain timers). receiverEvent assumes that it is not applied to an empty IOSt. */ receiverEvent :: !SchedulerEvent !(PSt .l) -> (!Bool,!Maybe DeviceEvent,!SchedulerEvent,!PSt .l) receiverEvent schedulerEvent=:(ScheduleMsgEvent msgEvent) pState # (ioid,pState) = accPIO ioStGetIOId pState recloc = case msgEvent of (QASyncMessage {qasmRecLoc}) -> qasmRecLoc (ASyncMessage { asmRecLoc}) -> asmRecLoc (SyncMessage { smRecLoc}) -> smRecLoc | ioid==recloc.rlIOId && ReceiverDevice==recloc.rlDevice = (True, Just (ReceiverEvent msgEvent),schedulerEvent,pState) | otherwise = (False,Nothing,schedulerEvent,pState) // MW11.. receiverEvent schedulerEvent=:(ScheduleOSEvent {ccMsg=CcWmINETEVENT,p1,p2,p3,p4} _) pState = (True, Just (InternetEvent (p1,p2,p3,p4)), schedulerEvent, pState) // ..MW11 receiverEvent schedulerEvent pState = (False,Nothing,schedulerEvent,pState)