0 | module System.Posix.Process.ProcStatus
2 | import public Data.C.Ptr
4 | import Derive.Prelude
5 | import System.Posix.Errno
6 | import System.Posix.Signal
9 | %language ElabReflection
11 | %foreign "C:li_wifexited, posix-idris"
12 | exited : CInt -> Bits8
14 | %foreign "C:li_wexitstatus, posix-idris"
15 | exitstatus : CInt -> Bits8
17 | %foreign "C:li_wifsignaled, posix-idris"
18 | signaled : CInt -> Bits8
20 | %foreign "C:li_wtermsig, posix-idris"
21 | termsig : CInt -> Bits32
23 | %foreign "C:li_wcoredump, posix-idris"
24 | coredump : CInt -> Bits8
26 | %foreign "C:li_wifstopped, posix-idris"
27 | stopped : CInt -> Bits8
29 | %foreign "C:li_wstopsig, posix-idris"
30 | stopsig : CInt -> Bits32
32 | %foreign "C:li_wifcontinued, posix-idris"
33 | continued : CInt -> Bits8
36 | data ProcStatus : Type where
37 | Exited : Bits8 -> ProcStatus
38 | Signaled : Signal -> (coreDumped : Bool) -> ProcStatus
39 | Stopped : Signal -> ProcStatus
40 | Continued : ProcStatus
41 | Other : CInt -> ProcStatus
43 | %runElab derive "ProcStatus" [Show,Eq]
46 | procStatus : CInt -> ProcStatus
48 | if toBool $
exited i then Exited (exitstatus i)
49 | else if toBool $
signaled i then Signaled (S $
termsig i) (toBool $
coredump i)
50 | else if toBool $
stopped i then Stopped (S $
stopsig i)
51 | else if toBool $
continued i then Continued