@@ -14,16 +14,28 @@ sendToThread {a} dest val
1414
1515||| Check for messages in the process inbox
1616checkMsgs : IO Bool
17−checkMsgs = do msgs <- foreign FFI_C "idris_checkMessages" (Ptr -> IO Int)
17+checkMsgs = do msgs <- foreign FFI_C "idris_checkMessages" (Ptr -> IO Ptr)
1818 prim__vm
19− return (intToBool msgs)
19+ null <- nullPtr msgs
20+ return (not null)
21+
22+||| Check for messages in the process inbox.
23+||| Returns either 'Nothing', if none, or 'Just pid' as pid of sender.
24+listenMsgs : IO (Maybe Ptr)
25+listenMsgs = do sender <- foreign FFI_C "idris_checkMessages" (Ptr -> IO Ptr)
26+ prim__vm
27+ null <- nullPtr sender
28+ return (if null
29+ then Nothing
30+ else Just sender)
2031
2132||| Check for messages from a specific sender in the process inbox
2233checkMsgsFrom : Ptr -> IO Bool
2334checkMsgsFrom sender
24− = do msgs <- foreign FFI_C "idris_checkMessagesFrom" (Ptr -> Ptr -> IO Int)
35+ = do msgs <- foreign FFI_C "idris_checkMessagesFrom" (Ptr -> Ptr -> IO Ptr)
2536 prim__vm sender
26− return (intToBool msgs)
37+ null <- nullPtr msgs
38+ return (not null)
2739
2840||| Check inbox for messages. If there are none, blocks until a message
2941||| arrives.