0 | module System.UV.Raw.Signal
 1 |
 2 | import System.UV.Raw.Callback
 3 | import System.UV.Raw.Handle
 4 | import System.UV.Raw.Loop
 5 | import System.UV.Raw.Pointer
 6 | import System.UV.Raw.Util
 7 |
 8 | import public System.UV.Data.Signal
 9 |
10 | %default total
11 |
12 | --------------------------------------------------------------------------------
13 | -- FFI
14 | --------------------------------------------------------------------------------
15 |
16 | %foreign (idris_uv "uv_signal_init")
17 | prim__uv_signal_init : Ptr Loop -> Ptr Signal -> PrimIO Int32
18 |
19 | %foreign (idris_uv "uv_signal_start")
20 | prim__uv_signal_start : Ptr Signal -> AnyPtr -> Bits32 -> PrimIO Int32
21 |
22 | %foreign (idris_uv "uv_signal_stop")
23 | prim__uv_signal_stop : Ptr Signal -> PrimIO Int32
24 |
25 | --------------------------------------------------------------------------------
26 | -- API
27 | --------------------------------------------------------------------------------
28 |
29 | parameters {auto has : HasIO io}
30 |
31 |   ||| Stops the given signal.
32 |   export
33 |   uv_signal_stop : Ptr Signal -> io Int32
34 |   uv_signal_stop h = primIO $ prim__uv_signal_stop h
35 |
36 |   export %inline
37 |   uv_signal_init : Ptr Loop -> Ptr Signal -> io Int32
38 |   uv_signal_init l h = primIO $ prim__uv_signal_init l h
39 |
40 |   ||| Start the handle with the given callback, watching for the given signal.
41 |   export
42 |   uv_signal_start :
43 |        Ptr Signal
44 |     -> (Ptr Signal -> Bits32 -> IO ())
45 |     -> Bits32
46 |     -> io Int32
47 |   uv_signal_start h f c = do
48 |     cb <- ptrUintCB f
49 |     uv_handle_set_data h cb
50 |     primIO $ prim__uv_signal_start h cb c
51 |