]> gitweb.factorcode.org Git - factor.git/blob - basis/unix/signals/signals.factor
25abdfba0797f5affa59b2df6807e11e65029665
[factor.git] / basis / unix / signals / signals.factor
1 ! Copyright (C) 2011 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs io kernel math namespaces sequences
4 system threads ;
5 IN: unix.signals
6
7 CONSTANT: signal-names
8 {
9     "SIGHUP" "SIGINT" "SIGQUIT" "SIGILL" "SIGTRAP" "SIGABRT"
10     "SIGEMT" "SIGFPE" "SIGKILL" "SIGBUS" "SIGSEGV" "SIGSYS"
11     "SIGPIPE" "SIGALRM" "SIGTERM" "SIGURG" "SIGSTOP" "SIGTSIP"
12     "SIGCONT" "SIGCHLD" "SIGTTIN" "SIGTTOU" "SIGIO" "SIGXCPU"
13     "SIGXFSZ" "SIGVTALRM" "SIGPROF" "SIGWINCH" "SIGINFO"
14     "SIGUSR1" "SIGUSR2"
15 }
16
17 TUPLE: signal n ;
18
19 GENERIC: signal-name ( obj -- str/f )
20
21 M: signal signal-name n>> signal-name ;
22
23 M: integer signal-name ( n -- str/f ) 1 - signal-names ?nth ;
24
25 : signal-name. ( n -- )
26     signal-name [ " (" ")" surround write ] when* ;
27
28 SYMBOL: dispatch-signal-hook
29
30 dispatch-signal-hook [ [ drop ] ] initialize
31
32 <PRIVATE
33
34 SYMBOL: signal-handlers
35
36 signal-handlers [ H{ } ] initialize
37
38 : dispatch-signal ( sig -- )
39     signal-handlers get-global at [ in-thread ] each ;
40
41 PRIVATE>
42
43 : add-signal-handler ( handler: ( -- ) sig -- )
44     signal-handlers get-global push-at ;
45
46 : remove-signal-handler ( handler sig -- )
47     signal-handlers get-global at [ remove! drop ] [ drop ] if* ;
48
49 [ dispatch-signal ] dispatch-signal-hook set-global