Source file signal.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
type t =
| Int
| Term
| Abrt
| Alrm
| Fpe
| Hup
| Ill
| Kill
| Pipe
| Quit
| Segv
| Usr1
| Usr2
| Chld
| Cont
| Stop
| Tstp
| Ttin
| Ttou
| Vtalrm
| Prof
| Bus
| Poll
| Sys
| Trap
| Urg
| Xcpu
| Xfsz
| Winch
| Unknown of int
external sigwinch : unit -> int = "stdune_winch_number" [@@noalloc]
let all =
let open Sys in
[ Abrt, sigabrt
; Alrm, sigalrm
; Fpe, sigfpe
; Hup, sighup
; Ill, sigill
; Int, sigint
; Kill, sigkill
; Pipe, sigpipe
; Quit, sigquit
; Segv, sigsegv
; Term, sigterm
; Usr1, sigusr1
; Usr2, sigusr2
; Chld, sigchld
; Cont, sigcont
; Stop, sigstop
; Tstp, sigtstp
; Ttin, sigttin
; Ttou, sigttou
; Vtalrm, sigvtalrm
; Prof, sigprof
; Bus, sigbus
; Poll, sigpoll
; Sys, sigsys
; Trap, sigtrap
; Urg, sigurg
; Xcpu, sigxcpu
; Xfsz, sigxfsz
; Winch, sigwinch ()
]
;;
let name = function
| Abrt -> "ABRT"
| Alrm -> "ALRM"
| Fpe -> "FPE"
| Hup -> "HUP"
| Ill -> "ILL"
| Int -> "INT"
| Kill -> "KILL"
| Pipe -> "PIPE"
| Quit -> "QUIT"
| Segv -> "SEGV"
| Term -> "TERM"
| Usr1 -> "USR1"
| Usr2 -> "USR2"
| Chld -> "CHLD"
| Cont -> "CONT"
| Stop -> "STOP"
| Tstp -> "TSTP"
| Ttin -> "TTIN"
| Ttou -> "TTOU"
| Vtalrm -> "VTALRM"
| Prof -> "PROF"
| Bus -> "BUS"
| Poll -> "POLL"
| Sys -> "SYS"
| Trap -> "TRAP"
| Urg -> "URG"
| Xcpu -> "XCPU"
| Xfsz -> "XFSZ"
| Winch -> "WINCH"
| Unknown n -> Int.to_string n
;;
let compare (x : t) (y : t) = Poly.compare x y
let to_dyn =
let open Dyn in
function
| Unknown n -> variant "Unknown" [ int n ]
| t -> variant (name t) []
;;
include Comparable.Make (struct
type nonrec t = t
let compare = compare
let to_dyn = to_dyn
end)
let to_int =
let table = Map.of_list_exn all in
function
| Unknown n -> n
| t -> Map.find_exn table t
;;
let of_int i =
let table = Int.Map.of_list_exn (List.map all ~f:(fun (t, i) -> i, t)) in
match Int.Map.find table i with
| None -> Unknown i
| Some s -> s
;;