1 (***********************************************************************)
2 (* The OcamlEvent library *)
4 (* Copyright 2002, 2003 Maas-Maarten Zeeman. All rights reserved. See *)
5 (* LICENCE for details. *)
6 (***********************************************************************)
8 (* $Id: libevent.ml,v 1.1 2004/12/18 21:58:25 maas Exp $ *)
17 let int_of_event_type = function
23 type event_callback
= Unix.file_descr
-> event_flags
-> unit
25 (* Use an internal hashtable to store the ocaml callbacks with the
27 let table = Hashtbl.create
0
29 (* Called by the c-stub, locate, and call the ocaml callback *)
30 let event_cb event_id fd etype
=
31 (Hashtbl.find
table event_id
) fd etype
34 external create
: unit -> event
= "oc_create_event"
36 (* Return the id of an event *)
37 external event_id
: event
-> int = "oc_event_id"
39 (* Return the signal associated with the event *)
40 external signal
: event
-> int = "oc_event_fd"
42 (* Return the fd associated with the event *)
43 external fd
: event
-> Unix.file_descr
= "oc_event_fd"
45 (* Set an event (not exported) *)
46 external cset_fd
: event
-> Unix.file_descr
-> int -> unit = "oc_event_set"
47 external cset_int
: event
-> int -> int -> unit = "oc_event_set"
50 let set event fd etype persist
(cb
: event_callback
) =
51 let rec int_of_event_type_list flag
= function
52 h
::t
-> int_of_event_type_list (flag
lor (int_of_event_type h
)) t
56 let f = int_of_event_type_list 0 etype
in
62 Hashtbl.add
table (event_id event
) cb
;
65 let set_signal event signal persist
(cb
: event_callback
) =
66 let signal_flag = (int_of_event_type SIGNAL
) in
67 let flag = if persist
then
72 Hashtbl.add
table (event_id event
) cb
;
73 cset_int event signal
flag
76 external add
: event
-> float option -> unit = "oc_event_add"
79 external cdel
: event
-> unit = "oc_event_del"
81 Hashtbl.remove
table (event_id event
);
85 (* Not fully implemented yet *)
86 external pending
: event
-> event_flags list
-> bool = "oc_event_pending"
89 external dispatch
: unit -> unit = "oc_event_dispatch"
91 type loop_flags
= ONCE
| NONBLOCK
92 external loop
: loop_flags
-> unit = "oc_event_loop"
94 (* Initialize the event library *)
95 external init
: unit -> unit = "oc_event_init"
97 Callback.register
"event_cb" event_cb;